Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序_AquireRequestState事件中使用POST数据重写Url_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# 在应用程序_AquireRequestState事件中使用POST数据重写Url

C# 在应用程序_AquireRequestState事件中使用POST数据重写Url,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我有一个在应用程序的事件中注册路由的代码。注册路由后,我在Http运行时缓存中设置了一个标志,这样我就不会再次执行路由注册代码。在此事件中注册路由有特定原因应用程序\u收单机构请求状态 重新启动应用程序池后,如果收到有效(与路由匹配)请求,则路由注册码生效,但IIS/ASP.Net不提供该请求,并返回404。随后的有效请求都可以正常工作 我想确保即使是第一个请求也得到了正确的处理 是否可以重写请求,以便在完成路由注册后,如果url与已注册的路由之一匹配,我们可以以某种方式尝试重播请求?有解决这个

我有一个在应用程序的
事件中注册路由的代码。注册路由后,我在Http运行时缓存中设置了一个标志,这样我就不会再次执行路由注册代码。在此事件中注册路由有特定原因
应用程序\u收单机构请求状态

重新启动应用程序池后,如果收到有效(与路由匹配)请求,则路由注册码生效,但IIS/ASP.Net不提供该请求,并返回404。随后的有效请求都可以正常工作

我想确保即使是第一个请求也得到了正确的处理


是否可以重写请求,以便在完成路由注册后,如果url与已注册的路由之一匹配,我们可以以某种方式尝试重播请求?有解决这个问题的方法吗?

这是一种
伪代码
,可以在
Global.asax
中使用

private bool RootIsRegistered = false; //register Application level var

void Application_BeginRequest(object sender,EventArgs e){
   if(!RootIsRegistered)
      RegisterRoots();
}
这样,即使在第一次请求时,您也可以确保您的根已注册。

如下所示

及以下

下面这条线

您可能需要针对
AuthenticateRequest
PostAuthorizerRequest
事件之间的某个事件进行URL注册,因为在此之后会发生路由


Url路由发生在
PostAuthorizerRequest
事件之后,由于路由已经注册,第一个请求也会得到很好的处理。

请添加一些代码,以便了解您如何注册路由。问题不在于我如何注册路由。路线注册工作正常,因为第二次请求之后它工作正常。我理解,但也许您可以在注册后处理该请求。为了知道这是否有效,有必要知道你是如何做到的。不是全部代码,但它是一个中间件还是一个动作过滤器。。。我知道你提到了一个事件,但它叫什么?根据这个,你可能需要瞄准AuthenticateRequest事件?@shankarsangli,完成。请看一看:-)我想你没有把问题陈述正确。请把问题再读一遍。