2016-11-10 155 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中的#,從而破壞應用程序。