所以我在这里绞尽脑汁。我创建了一个Blazor服务器应用程序,并添加了一些ApiControllers。我得到的似乎是奇怪的错误,只是生产环境。出于某种原因,Request.Body在我阅读之前就被处理掉了。我试过用StreamReader阅读,复制到一个新的MemoryStream中,奇怪的是,它可能可以处理十几个请求,然后停止工作并开始抛出";流完成后不允许读取";或";IFeatureCollection已被处置";错误。我可以让它在VS中的IIS Express的调试模式下完美地工作。但它在IIS服务器上不会一致工作。奇怪的是,当使用Postman发送电话时,它会一直工作。真的很奇怪。因此,作为一个例子,我基本上有一个ApiController,ProfileController,它只有一个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框架无法知道您的操作仍在运行并立即返回响应。
在我看来是奇怪的错误
是的,它可能会意外成功。线程和异步错误可能是非常不确定的。