我有一个简单的OWIN自托管应用程序,其控制器扩展了ApiController
。问题是,当我向控制器发送没有数据的POST请求(该方法没有参数)时,它返回:
所需长度
然后,应用程序因未处理的ObjectDisposedException
而崩溃(下面是完整的堆栈跟踪)。如果POST请求包含数据,则一切正常。
通过使用以下简单方法进行复制,我从等式中删除了所有控制器逻辑:
[HttpPost]
public void MyMethod()
{
return;
}
因此,我猜这与路由有关吗?但是我的路线仅设置为默认路线:
config.Routes.MapHttpRoute("My Service", "{controller}/{action}/{id}", new { id = RouteParameter.Optional });
为什么我的应用程序会以这种方式运行?
要发送请求,我使用curl
:
curl --request POST http://localhost/mycontroller/mymethod
堆栈跟踪:
未处理的异常:System.ObjectDisposedException:无法访问 处置对象。对象名称:“ System.Net.HttpListenerResponse”。在 System.Net.HttpListenerResponse.set_StatusCode(System.Int32值) 在<59be416de143456b88b9988284f43350>:0中的[0x00016] Microsoft.Owin.Host.HttpListener.RequestProcessing.OwinHttpListenerResponse.End ()[0x0001c]在<5086711574984403b242554b11c41440>:0中 Microsoft.Owin.Host.HttpListener.RequestProcessing.OwinHttpListenerContext.End ()[0x00010]在<5086711574984403b242554b11c41440>:0中 Microsoft.Owin.Host.HttpListener.RequestProcessing.OwinHttpListenerContext.End (System.Exception ex)[0x0001e]在 <5086711574984403b242554b11c41440>:0在 Microsoft.Owin.Host.HttpListener.OwinHttpListener + d__5.MoveNext ()在[5086711574984403b242554b11c41440>:0中的[0x001f9] ---从上一个引发异常的位置开始的堆栈跟踪- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task任务)[0x0004e]在 :0处 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task任务)在[0x0002e]中 :0处 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task任务)在[0x0000b]中 :0处 System.Runtime.CompilerServices.TaskAwaiter.GetResult()[0x00000]在 :0处 Microsoft.Owin.Host.HttpListener.OwinHttpListener + d__0.MoveNext ()[0x00202]在<5086711574984403b242554b11c41440>:0中 ---从上一个引发异常的位置开始的堆栈跟踪- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in:0 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.m__1 (系统对象状态)在[0x00000]中 :0处 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (系统对象状态)在[0x0000e]中 :0处 System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext执行上下文, System.Threading.ContextCallback回调,System.Object状态, System.Boolean reserveSyncCtx)[0x0008d]在 :0处 System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext执行上下文, System.Threading.ContextCallback回调,System.Object状态, System.Boolean prepareSyncCtx)[0x00000]在 :0处 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem ()[0x0002a] in:0 at System.Threading.ThreadPoolWorkQueue.Dispatch()[0x00096]在 :0处 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [0x00000] in:0
答案 0 :(得分:0)
也许如果您显示所有控制器类,我可以帮助您更多。
尝试使您的帖子这样。
每个获取/发布都要上一堂课
例如在Controllers / Api / MyFunction.cs文件夹中
在WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
“ MyFunction.cs”中的
public class MyFunction : ApiController
{
public string Get()
{
return "hello";
}
public bool Post(string param1)
{
return 1;
}
}