C# WebApi - 在 HTTPRequest 中发送长文本不起作用
Posted
技术标签:
【中文标题】C# WebApi - 在 HTTPRequest 中发送长文本不起作用【英文标题】:C# WebApi - Sending long text in HTTPRequest not working 【发布时间】:2021-10-16 00:29:37 【问题描述】:我正在开发一个也可用作 API 网关的 WebApp(Razor 页面)。 WebApp 从另一个 WebAPI 项目(同一解决方案的一部分)获取一些数据。 问题是当我对 WebAPI 执行 HTTPRequest 时,如果请求不是太长,WebAPI 会处理它,但是当我尝试发送更长的请求(长字符)时,它会拒绝它并发回 404 .
WebApp 是一个基本的 CMS。因此,该应用程序将向用户提供网页的创建。我使用的是 restful 请求模型,所以请求看起来像这样:
string baseURL = @"https://localhost:5001";
public async Task<string> CreatePageAsync(string pageTitle, string pageBody, int? pageOrder, string userID)
if (pageTitle != null && pageBody != null && pageOrder != null && userID != null)
string fullURL = baseURL + $"/api/pages/create/page/title/pageTitle/body/pageBody/order/pageOrder/user/userID";
var request = new HttpRequestMessage(HttpMethod.Post, fullURL);
HttpResponseMessage response = await _httpClient.SendAsync(request);
if (!response.IsSuccessStatusCode)
return "error";
return "ok";
您可以想象,“pageBody”属性负责请求的长度。所以,当我用简短的单词测试WebAPI时,它工作得很好,但是如果我从互联网上复制一篇文章(只是文本)并将其用作正文(模拟用户的内容),如果它是一个长的,它将返回 404。
另一方面,WebAPI 如下所示:
[HttpPost("Create/page/title/pageTitle/body/pageBody/order/pageOrder/user/userID")]
//[ValidateAntiForgeryToken]
public async Task<string> CreatePage(string pageTitle, string pageBody, int pageOrder, string userID) //[Bind("pageName,pageHead,pageBody,userID")]
if (ModelState.IsValid)
DateTime now = DateTime.Now;
WebPage newPage = new WebPage()
PageID = _globalServices.GuidFromString(_globalServices.GetSeed()),
PageDateCreated = now,
PageDateUpdated = now,
PageOrder = pageOrder,
PageTitle = pageTitle,
PageBody = pageBody,
UserID = userID
;
try
await _pagesDBContext.Pages.AddAsync(newPage);
await _pagesDBContext.SaveChangesAsync();
catch (Exception e)
string message = "ERROR: Could not save to the database.\n";
return message + e.Message;
return "Page saved";
return "ERROR: Model invalid";
我将请求作为简单文本发送。不知道有没有更好的办法。
有什么想法吗?
【问题讨论】:
有多长? 例如,我正在测试一个正好有 4024 个字符的正文。 【参考方案1】:我没有足够的代表发表评论,但您可以在 GET 请求中发送的最大字符数似乎是 2,048。
【讨论】:
感谢弗劳斯基!我想我发现了两个不同的问题。第一个是角色。我使用的是从 IT 文章中复制的文本的一部分,其中包含诸如“/,()”之类的字符,尤其是大斜线(我相信这就是这个“/”字符的名称),这令人困惑并被采取作为查询本身的除数。所以我删除了那些 - 以及其他一些特殊字符 - 并且它起作用了!第二个是长度。它将接受 4000 个字符的正文,但不接受 5500 个字符的正文。所以现在我需要一些关于如何处理特殊字符和长度的想法。想法? 我很抱歉我现在才看到这个。我希望你能解决它! 我永远不会原谅你的老气...哈哈,现在说真的,我把它放在一边,所以我不会阻止自己(如果不立即解决,这是一个问题)。我明天需要展示这个,所以我想我会先让它工作,然后再打磨它。所以不要走得太远,我可能需要一些备份! 没问题!我无论如何都不是专家,但两个脑袋总是比一个好!以上是关于C# WebApi - 在 HTTPRequest 中发送长文本不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 C# Caliburn Micro WPF 中异步和等待获取 HttpRequest 时更新 ProgressBar
c# WebBrower 与 HttpRequest配合 抓取数据
有没有办法在 HttpRequest 中同时返回 StatusCode 和 Content?