将原始文本转换为精炼、符合 SEO 的内容是许多构建内容丰富的 Web 应用程序的 .NET 开发人员每天面临的挑战。GroupDocs.Rewriter Cloud SDK for .NET 提供了强大的 API,能够在保持原意的同时改写句子。本《逐步指南》展示了如何在 ASP.NET Core MVC 中集成该 SDK,包括设置库、配置凭据、在控制器中实现改写逻辑以及在 Razor 视图中渲染结果。

用例需求

企业在生成用户生成的文章、产品描述或营销文案时,通常需要在无需人工编辑的情况下提升可读性。此类场景的需求包括:

  • 实时文本重写,直接来自网页表单。
  • 在服务器端安全处理 API 凭据。
  • 与现有的 ASP.NET Core MVC 管道无缝集成。

使用通用的字符串‑操作代码很快就会变得容易出错且难以扩展,这就是为什么需要专用的文档重写库。

为工作选择 GroupDocs.Rewriter Cloud SDK for .NET

GroupDocs.Rewriter Cloud SDK for .NET 提供基于 REST‑based 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

您也可以从下载页面下载二进制文件。

添加重写器凭据的配置

将您的 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 项目中非常简单,只需按照本分步指南将其集成到 ASP.NET Core MVC。该库负责自然语言重写的繁重工作,让您专注于 UI 和业务逻辑。请记得保护您的 AppSid 和 AppKey,使用临时许可证进行评估,并在生产环境中升级为正式许可证。拥有代码和 cURL 示例后,您现在可以在任何 .NET Web 应用程序中添加智能文本重写功能。

常见问题

逐步指南在 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 的异步管道进行扩展。此方式符合在 step-by-step 指南中演示的与 ASP.NET Core MVC 集成的模式。

在哪里可以获取用于测试的临时许可证?
临时许可证可在临时许可证页面获取。它允许您在不购买的情况下评估 SDK。

进一步阅读