تبدیل متن خام به محتوای صیقلی و سئو‑دوست یک چالش روزانه برای بسیاری از توسعه‌دهندگان .NET است که برنامه‌های وب پرمحتوا می‌سازند. GroupDocs.Rewriter Cloud SDK for .NET یک API قدرتمند ارائه می‌دهد که جملات را بازنویسی می‌کند در حالی که معنا را حفظ می‌کند. این راهنمای گام‌به‌گام برای ادغام با ASP.NET Core MVC نشان می‌دهد چگونه کتابخانه را تنظیم کنید، اعتبارنامه‌ها را پیکربندی کنید، منطق بازنویسی را در یک کنترلر پیاده‌سازی کنید و نتایج را در یک نمای Razor رندر کنید.

نیازمندی‌های مورد استفاده

سازمان‌هایی که مقالات تولیدشده توسط کاربران، توصیفات محصول یا متن‌های بازاریابی ایجاد می‌کنند، اغلب نیاز دارند تا خوانایی را بدون ویرایش دستی بهبود بخشند. الزامات برای چنین سناریویی شامل موارد زیر است:

  • بازنویسی متن به‌صورت زمان واقعی مستقیماً از یک فرم وب.
  • مدیریت ایمن اعتبارهای API در سمت سرور.
  • یکپارچه‌سازی بدون درز با خط لولهٔ موجود ASP.NET Core MVC.

استفاده از کدهای عمومی دستکاری رشته‑به‌سرعت مستعد خطا می‌شود و مقیاس‌پذیر نیست، به همین دلیل یک کتابخانه اختصاصی بازنویسی سند ضروری است.

انتخاب GroupDocs.Rewriter Cloud SDK for .NET برای کار

GroupDocs.Rewriter Cloud SDK for .NET یک API مبتنی بر REST ارائه می‌دهد که از چندین زبان پشتیبانی می‌کند، حالت‌های بازنویسی قابل تنظیم دارد و پردازش با عملکرد بالا را فراهم می‌کند. قابلیت‌های کلیدی آن که با مورد استفاده مطابقت دارند عبارتند از:

  • RewriteModeEnum.Rewrite - یک بازنویسی زبان طبیعی از متن ورودی تولید می‌کند.
  • DI‑friendly client - می‌تواند به عنوان یک تک‌نمونه در کانتینر سرویس ASP.NET Core ثبت شود.
  • Strong typing and async support - به‌طور طبیعی در الگوهای ناهمزمان مدرن .NET جای می‌گیرد.

راهنمای گام به گام برای ادغام با ASP.NET Core MVC نشان می‌دهد که این قابلیت‌ها چگونه با نیازها مطابقت دارند. برای اطلاعات دقیق API، به مستندات رسمی و مرجع API مراجعه کنید.

راهنمای گام به گام برای ادغام با ASP.NET Core MVC

این راهنمای گام‌به‌گام برای ادغام با ASP.NET Core MVC شما را در هر مرحلهٔ مورد نیاز پیکربندی راهنمایی می‌کند.

نصب بسته SDK

پکیج NuGet را به پروژه خود اضافه کنید.

dotnet add package GroupDocs.Rewriter-Cloud

شما همچنین می‌توانید باینری‌ها را از صفحه دانلود دریافت کنید.

افزودن پیکربندی برای اعتبارهای Rewriter

AppSid و AppKey خود را در پیکربندی قرار دهید. قطعه کد زیر آنها را برای سادگی به‌صورت در‑حافظه اضافه می‌کند.

builder.Configuration.AddInMemoryCollection(new[]
{
    new KeyValuePair<string,string>("GroupDocsRewriter:AppSid", "YOUR_APP_SID"),
    new KeyValuePair<string,string>("GroupDocsRewriter:AppKey", "YOUR_APP_KEY")
});

ثبت کلاینت API بازنویسگر در DI

کلاینت SDK به‌عنوان singleton ثبت می‌شود تا بتوان آن را به کنترلرها تزریق کرد.

builder.Services.Configure<RewriterSettings>(builder.Configuration.GetSection("GroupDocsRewriter"));

builder.Services.AddSingleton<IRewriterApi>(sp =>
{
    var settings = sp.GetRequiredService<IOptions<RewriterSettings>>().Value;
    var config = new Configuration
    {
        AppSid = settings.AppSid,
        AppKey = settings.AppKey
    };
    return new RewriterApi(config);
});

ایجاد کنترلر MVC و مدل نمایشی

کنترلر متن اصلی را دریافت می‌کند، API بازنویس را فراخوانی می‌کند و نتیجه بازنویسی شده را برمی‌گرداند.

public class RewriterController : Controller
{
    private readonly IRewriterApi _rewriterApi;

public RewriterController(IRewriterApi rewriterApi)
    {
        _rewriterApi = rewriterApi;
    }

[HttpGet]
    public IActionResult Index()
    {
        return View(new RewriterViewModel());
    }

[HttpPost]
    public async Task<IActionResult> Index(RewriterViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

var rewriteRequest = new RewriteRequest
        {
            Text = model.InputText,
            Language = "en",
            TargetLanguage = "en",
            RewriteMode = RewriteModeEnum.Rewrite
        };

RewriteResponse response = await _rewriterApi.RewriteAsync(rewriteRequest);
        model.OutputText = response?.Result?.Text ?? string.Empty;

return View(model);
    }
}

مدل نمای همراه، رشته‌های ورودی و خروجی را نگه می‌دارد.

public class RewriterViewModel
{
    [Required]
    [Display(Name = "Original Text")]
    public string InputText { get; set; } = string.Empty;

[Display(Name = "Rewritten Text")]
    public string OutputText { get; set; } = string.Empty;
}

ساخت نمای Razor برای ورودی و خروجی متن

صفحه Razor یک فرم ساده ارائه می‌کند و متن بازنویسی‌شده را در صورت موجود بودن نمایش می‌دهد.

@model RewriterViewModel
@{
    ViewData["Title"] = "Text Rewriter";
}
<h2>@ViewData["Title"]</h2>

<form asp-action="Index" method="post" class="form-horizontal">
    <div class="form-group">
        <label asp-for="InputText" class="control-label"></label>
        <textarea asp-for="InputText" class="form-control" rows="6"></textarea>
        <span asp-validation-for="InputText" class="text-danger"></span>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary">Rewrite</button>
    </div>
</form>

@if (!string.IsNullOrWhiteSpace(Model.OutputText))
{
    <hr />
    <h4>Rewritten Text</h4>
    <textarea class="form-control" rows="6" readonly>@Model.OutputText</textarea>
}

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

مثال کامل کارآمد برای بازنویسی سند در ASP.NET Core MVC

مثال زیر شامل تمام فایل‌های منبع مورد نیاز برای اجرای راه‌حل است.

// ---------------------------------------------------
// Program.cs
// ---------------------------------------------------
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using GroupDocs.Rewriter.Cloud.Sdk.Api;
using GroupDocs.Rewriter.Cloud.Sdk.Client;
using GroupDocs.Rewriter.Cloud.Sdk.Model.Requests;
using GroupDocs.Rewriter.Cloud.Sdk.Model;
using System.Threading.Tasks;

var builder = WebApplication.CreateBuilder(args);

// Add configuration for GroupDocs Rewriter credentials
builder.Configuration.AddInMemoryCollection(new[]
{
    new KeyValuePair<string,string>("GroupDocsRewriter:AppSid", "YOUR_APP_SID"),
    new KeyValuePair<string,string>("GroupDocsRewriter:AppKey", "YOUR_APP_KEY")
});

builder.Services.Configure<RewriterSettings>(builder.Configuration.GetSection("GroupDocsRewriter"));

// Register GroupDocs Rewriter API client in DI
builder.Services.AddSingleton<IRewriterApi>(sp =>
{
    var settings = sp.GetRequiredService<IOptions<RewriterSettings>>().Value;
    var config = new Configuration
    {
        AppSid = settings.AppSid,
        AppKey = settings.AppKey
    };
    return new RewriterApi(config);
});

builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Rewriter}/{action=Index}/{id?}");

app.Run();

// ---------------------------------------------------
// RewriterSettings.cs
// ---------------------------------------------------
public class RewriterSettings
{
    public string AppSid { get; set; } = string.Empty;
    public string AppKey { get; set; } = string.Empty;
}

// ---------------------------------------------------
// Models/RewriterViewModel.cs
// ---------------------------------------------------
using System.ComponentModel.DataAnnotations;

public class RewriterViewModel
{
    [Required]
    [Display(Name = "Original Text")]
    public string InputText { get; set; } = string.Empty;

[Display(Name = "Rewritten Text")]
    public string OutputText { get; set; } = string.Empty;
}

// ---------------------------------------------------
// Controllers/RewriterController.cs
// ---------------------------------------------------
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

public class RewriterController : Controller
{
    private readonly IRewriterApi _rewriterApi;

public RewriterController(IRewriterApi rewriterApi)
    {
        _rewriterApi = rewriterApi;
    }

[HttpGet]
    public IActionResult Index()
    {
        return View(new RewriterViewModel());
    }

[HttpPost]
    public async Task<IActionResult> Index(RewriterViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

// Build request for the Rewriter API
        var rewriteRequest = new RewriteRequest
        {
            Text = model.InputText,
            Language = "en",               // source language
            TargetLanguage = "en",         // target language (same for rewriting)
            RewriteMode = RewriteModeEnum.Rewrite // choose rewrite mode
        };

// Call the API
        RewriteResponse response = await _rewriterApi.RewriteAsync(rewriteRequest);

// Populate the view model with the rewritten text
        model.OutputText = response?.Result?.Text ?? string.Empty;

return View(model);
    }
}

// ---------------------------------------------------
// Views/Rewriter/Index.cshtml
// ---------------------------------------------------
@model RewriterViewModel
@{
    ViewData["Title"] = "Text Rewriter";
}
<h2>@ViewData["Title"]</h2>

<form asp-action="Index" method="post" class="form-horizontal">
    <div class="form-group">
        <label asp-for="InputText" class="control-label"></label>
        <textarea asp-for="InputText" class="form-control" rows="6"></textarea>
        <span asp-validation-for="InputText" class="text-danger"></span>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary">Rewrite</button>
    </div>
</form>

@if (!string.IsNullOrWhiteSpace(Model.OutputText))
{
    <hr />
    <h4>Rewritten Text</h4>
    <textarea class="form-control" rows="6" readonly>@Model.OutputText</textarea>
}

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

نکته: این مثال کد عملکرد اصلی را نشان می‌دهد. قبل از استفاده از آن در پروژه خود، مطمئن شوید که مسیرهای فایل و مقادیر پیکربندی را به‌گونه‌ای به‌روزرسانی کنید که با محیط واقعی شما مطابقت داشته باشد، اطمینان حاصل کنید که تمام وابستگی‌های مورد نیاز به‌درستی نصب شده‌اند و به‌طور کامل در محیط توسعه خود تست کنید. اگر با مشکلی مواجه شدید، لطفاً به مستندات رسمی مراجعه کنید یا برای دریافت کمک به تیم پشتیبانی مراجعه نمایید.

اجرای بازنویسی سند از طریق REST API با استفاده از cURL

در زیر یک گردش کار سریع cURL آورده شده است که همان عملیات بازنویسی را از طریق نقاط انتهایی REST GroupDocs Rewriter انجام می‌دهد.

احراز هویت و دریافت توکن دسترسی

curl -X POST "https://api.groupdocs.cloud/v1/auth/token" \
     -H "Content-Type: application/json" \
     -d '{"client_id":"YOUR_CLIENT_ID","client_secret":"YOUR_CLIENT_SECRET"}'

پاسخ یک access_token برمی‌گرداند که در تماس‌های بعدی از آن استفاده خواهید کرد.

بارگذاری متن منبع (اختیاری برای فایل‌های بزرگ)

curl -X POST "https://api.groupdocs.cloud/v1/storage/file/upload" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -F "file=@input.txt"

اجرای عملیات بازنویسی

curl -X POST "https://api.groupdocs.cloud/v1/rewriter/rewrite" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
           "text": "Your original text goes here.",
           "language": "en",
           "targetLanguage": "en",
           "rewriteMode": "Rewrite"
         }'

پاسخ JSON شامل متن بازنویسی شده در فیلد result.text است.

دانلود نتیجه (اگر آن را به عنوان فایل ذخیره کرده‌اید)

curl -X GET "https://api.groupdocs.cloud/v1/storage/file/download?path=output.txt" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o rewritten.txt

برای جزئیات بیشتر درباره پارامترهای درخواست و قالب‌های پاسخ، به مستندات رسمی API مراجعه کنید.

نتیجه‌گیری

یکپارچه‌سازی GroupDocs.Rewriter Cloud SDK for .NET در یک پروژه ASP.NET Core MVC به‌راحتی انجام می‌شود به‌شرط این‌که راهنمای گام‌به‌گام ادغام با ASP.NET Core MVC را دنبال کنید. این کتابخانه بار سنگین بازنویسی زبان طبیعی را بر عهده می‌گیرد و به شما امکان می‌دهد بر روی رابط کاربری و منطق کسب‌وکار تمرکز کنید. به یاد داشته باشید AppSid و AppKey خود را ایمن کنید، برای ارزیابی از لایسنس موقت استفاده کنید و برای بارهای کاری تولیدی به لایسنس کامل ارتقا دهید. با داشتن کد و مثال‌های cURL، اکنون می‌توانید بازنویسی هوشمند متن را به هر برنامه وب .NET اضافه کنید.

سوالات متداول

چگونه راهنمای گام‌به‌گام برای ادغام با ASP.NET Core MVC پاسخ‌های خطای API را مدیریت می‌کند؟
مثال کنترلر قبل از فراخوانی API، ModelState.IsValid را بررسی می‌کند و RewriteResponse را دریافت می‌کند. اگر API خطایی برگرداند، شیء response مقدار null خواهد داشت و نمای (view) فقط خروجی خالی را نشان می‌دهد. برای مدیریت دقیق خطاها، به مستندات رسمی مراجعه کنید.

آیا می‌توانم اسناد غیر از متن ساده، مانند DOCX یا PDF، با همان روش بازنویسی کنم؟
بله. Rewriter API متن خام استخراج‌شده از فرمت‌های پشتیبانی‌شده را می‌پذیرد. می‌توانید ابتدا از GroupDocs.Parser یا GroupDocs.Conversion برای استخراج متن استفاده کنید، سپس آن را به نقطه انتهایی بازنویسی (rewrite endpoint) ارسال کنید. هر دو SDK در خانواده محصولات GroupDocs فهرست شده‌اند.

آیا امکان اجرای عملیات بازنویسی به صورت ناهمزمان در یک وب‌سایت پر ترافیک وجود دارد؟
به‌طور قطع. کنترلر از await _rewriterApi.RewriteAsync(...) استفاده می‌کند که کاملاً ناهمزمان است و با خط لولهٔ ناهمزمان ASP.NET Core مقیاس‌پذیر است. این الگو همان‌طور که در راهنمای گام‌به‌گام برای یکپارچه‌سازی با ASP.NET Core MVC نشان داده شده است، مطابقت دارد.

از کجا می‌توانم یک لایسنس موقت برای تست دریافت کنم؟
یک لایسنس موقت از صفحه لایسنس موقت در دسترس است. این به شما امکان می‌دهد SDK را بدون تعهد به خرید ارزیابی کنید.

مطالعهٔ بیشتر