將原始文字轉換為精緻、符合 SEO 的內容是許多 .NET 開發人員在構建內容豐富的 Web 應用程式時的日常挑戰。 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 提供基於 REST 的 API,支援多種語言、可自訂的改寫模式以及高效能處理。其符合使用情境的主要功能包括:

  • 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")
});

在 DI 中註冊 Rewriter API 客戶端

SDK 客戶端已註冊為單例,以便可以注入到控制器中。

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 控制器和視圖模型

控制器接收原始文本,調用 Rewriter 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");}
}

注意: 此程式碼範例示範了核心功能。 在將其用於您的專案之前,請確保更新所有檔案路徑和設定值以符合實際環境,驗證已正確安裝所有必要的相依項,並在開發環境中徹底測試。 若遇到任何問題,請參閱官方文件或聯絡支援團隊尋求協助。

使用 cURL 透過 REST API 執行文件重寫

以下是一個快速的 cURL 工作流程,透過 GroupDocs Rewriter REST 端點執行相同的改寫操作。

驗證並取得存取令牌

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 專案中,只要遵循此一步步的整合指南,即可輕鬆完成。此函式庫負責自然語言重寫的繁重工作,讓您可以專注於 UI 與業務邏輯。請務必保護您的 AppSid 與 AppKey,使用臨時授權進行評估,並在生產環境升級至正式授權。有了程式碼和 cURL 範例,您現在可以在任何 .NET 網頁應用程式中加入智慧文字重寫功能。

常見問題

步驟指南在 ASP.NET Core MVC 中如何處理 API 的錯誤回應?
控制器範例在呼叫 API 前會檢查 ModelState.IsValid,並捕獲 RewriteResponse。如果 API 回傳錯誤,response 物件將為 null,視圖將僅顯示空白輸出。欲取得更詳細的錯誤處理說明,請參閱 官方文件。

我可以使用相同的方法重寫除純文字之外的文件,例如 DOCX 或 PDF 嗎?
是的。Rewriter API 接受從受支援格式提取的原始文字。您可以先使用 GroupDocs.Parser 或 GroupDocs.Conversion 提取文字,然後將其傳遞給 rewrite 端點。兩個 SDK 都列在 GroupDocs 產品系列中。

是否可以在高流量網站中以非同步方式執行 rewrite 操作?
當然可以。控制器使用 await _rewriterApi.RewriteAsync(...),它是完全非同步的,並且能夠隨 ASP.NET Core 的非同步管線擴展。這符合在逐步指南中示範的與 ASP.NET Core MVC 整合的模式。

我可以從哪裡獲得測試用的臨時授權?
您可以從臨時授權頁面獲得臨時授權。它允許您在不購買的情況下評估 SDK。

進一步閱讀