【发布时间】: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 个字符的正文。
标签: c# visual-studio asp.net-core asp.net-web-api .net-core