如何解决Blazor App中的ApiController问题
所以我在这里动脑筋。我有一个已创建的Blazor服务器应用程序,并在其中添加了一些ApiControllers。我发现只有在生产环境中才出现奇怪的错误。由于某种原因,在我无法阅读之前已经处理了Request.Body。我试过用StreamReader进行读取,然后复制到新的MemoryStream中,这很奇怪,它可以处理十几个请求,然后停止工作并开始抛出“流完成后不允许读取”或“ IFeatureCollection被丢弃”错误。我可以让它在VS中的IIS Express中以调试模式完美运行。但是它不能在IIS服务器上一致地工作。奇怪的是,当用Postman发送呼叫时,它将始终如一地工作。真的很奇怪。因此,基本上,我以一个示例为例,它是ApiController,ProfileController,它只有1个POST方法
[HttpPost]
public async void Post()
{
String bodyContent = String.Empty;
using(StreamReader rdr = new StreamReader(Request.Body))
{
bodyContent = await rdr.ReadToEndAsync();
}
// use body content xml,generate response xml
String responseXML = "ResponseText";
Response.ContentType = "application/xml";
Response.WriteAsync(responseXML);
}
因此,在读取上面的请求流时,有时会出现错误,有时可行,然后当我尝试设置ContentType时,我收到了响应已被丢弃的错误
有关Blazor的事情是否在API路由之前消耗了请求/响应流?这真让我感到困惑。
解决方法
// public async void Post()
public async Task Post()
async void
方法是无法等待的,aspnet框架无法知道您的操作仍在运行并立即返回响应。
在我看来是奇怪的错误
是的,它可能会意外地成功。线程和异步错误可能非常不确定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。