我正在使用一个库,它在我的角度应用程序中向.axd路径提交一个"POST“请求。由于我使用的是UI-路由器,似乎附加到URL的#/阻止了请求正确地到达DLL。
在库中需要访问的URL是:
http://localhost:8080/MyApplication/MyArea/ModuleName#/ThermalLabelWebEditor.axd?_=1478731762000
但是,我从这个"POST“请求中得到的只是页面的HTML数据。我相信这是MVC以其默认方式处理路径的症状,搜索与上述URL匹配的页面,而不是访问DLL。
我想要达到的目标是
routes.IgnoreRoute("{*anything}/ThermalLabelWebEditor.axd/{*pathInfo}");但是,这在MVC中是无效的。
此外,我在区域的Web.config文件中指定了这个库所需的httpHandler,主要是:
<system.web>
<httpHandlers>
<add path="ThermalLabelWebEditor.axd" verb="*" type="Neodynamic.Web.ThermalLabelEditor.ThermalLabelWebEditor"/>
...
<system.webServer>
<handlers>
<add name="TLWE" path="ThermalLabelWebEditor.axd" verb="*" preCondition="integratedMode" type="Neodynamic.Web.ThermalLabelEditor.ThermalLabelWebEditor" />现在,我知道我可以在我的角模块的配置中指定$locationProvider.html5Mode(true);。但是,如果可能的话,我想避免这样做,因为它不能解决那些必须使用#回退的旧的、非HTML5 5浏览器的问题。
我如何为这个区域(或整个MVC应用程序)或RouteConfig.cs配置我的RouteConfig.cs文件,以确保对ThermalLabelWebEditor.axd的请求能够成功完成?
我正在使用MVC 5,.NET 4.6,角1.5.8和UI-路由器v0.3.1.
发布于 2016-11-11 17:47:45
经过大量调查,我确定这个问题只能在JavaScript方面解决。即使使用通配符,也没有办法让IIS在Handler的#部分解析path。由于#将如何短路URL的性质,IIS无法将请求路由到Handler,因此使用破坏应用程序的标准MVC来处理响应。类似地,即使使用routes.IgnoreRoute,MVC也不能配置为解释#字符。
这个问题的解决方案实际上是在发送请求和删除#之前解析URL。这样,就可以将处理程序映射配置为查看所讨论的MyArea/MyModule/HttpHandler.axd...路由,并在查看MVC结构之前拦截到IIS。
我应该指出,我避免在UI-路由器中使用HTML5模式的原因是为了保持浏览器的兼容性。如果启用了HTML5模式,则将修复符合HTML5 5的浏览器的问题。但是,非HTML5 5浏览器将返回到#中,从而破坏应用程序。
https://stackoverflow.com/questions/40531551
复制相似问题