2016-11-10 90 views
0

我正在使用向我的Angular应用程序中的.axd路径提交“POST”请求的库。由于我使用的是UI-Router,因此附加到URL的​​似乎阻止了请求正确到达DLL。使用UI路由器和MVC访问HTTP处理程序5

需要在图书馆要达到的网址是:

http://localhost:8080/MyApplication/MyArea/ModuleName#/ThermalLabelWebEditor.axd?_=1478731762000

然而,所有我得到这个“POST”请求,背面是页面的HTML数据。我相信这是MVC的一种症状,它以默认方式处理路径,搜索与上述URL匹配的页面,而不是访问DLL。

我所试图实现的是沿

routes.IgnoreRoute("{*anything}/ThermalLabelWebEditor.axd/{*pathInfo}"); 

线的东西。然而,这是不是在MVC有效。

此外,我在我区的Web.config文件已指定该库所需的httpHandler S,主要表现在:

<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浏览器的问题。

如何配置我的Web.config该区域(或整个MVC应用程序)文件或RouteConfig.cs以确保ThermalLabelWebEditor.axd的请求将成功完成?我使用的是MVC 5,.NET 4.6,Angular 1.5.8和UI-Router v0.3.1。

回答

0

经过大量调查后,我确定这个问题只能在JavaScript端修复。即使使用通配符,似乎也无法让IIS在HTTP处理程序的path部分中解析#。由于#将使URL短路的性质,IIS无法将请求路由到HTTP处理程序,因此处理响应而不是使用标准MVC来破坏应用程序。同样,即使使用​​,MVC也不能配置为解释#字符。

此问题的解决方案实际上只是在发送请求和删除#之前解析URL。有了这个,处理程序映射可以配置为查看问题MyArea/MyModule/HttpHandler.axd...中的路由,并在查看MVC结构之前用IIS截取。

我应该注意,我在UI-Router中避免使用HTML5模式的原因是保持浏览器兼容性。如果启用了HTML5模式,则问题将被修正用于符合HTML5的浏览器。但是,非HTML5浏览器将回退到URL中的#,从而破坏应用程序。