【问题标题】:Accessing HTTP Handler with UI-Router and MVC 5使用 UI-Router 和 MVC 5 访问 HTTP 处理程序
【发布时间】:2017-03-24 17:08:38
【问题描述】:

我正在使用一个库,该库向我的 Angular 应用程序中的 .axd 路径提交“POST”请求。由于我使用的是 UI-Router,似乎附加到 URL 的#/ 阻止了请求正确到达 DLL。

库中需要到达的网址是:

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

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

我想要达到的目标是

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

但是,这在 MVC 中无效。

另外,我在我的区域的Web.config 文件中指定了这个库所需的httpHandlers,主要是:

<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" />

现在,我知道我可以在 Angular 模块的配置中指定 $locationProvider.html5Mode(true);。但是,如果可能的话,我想避免这样做,因为它不能解决必须使用 # 后备的旧版非 HTML5 浏览器的问题。

如何为这个区域(或整个 MVC 应用程序)或RouteConfig.cs 配置我的Web.config 文件,以确保对ThermalLabelWebEditor.axd 的请求将成功完成?

我正在使用 MVC 5、.NET 4.6、Angular 1.5.8 和 UI-Router v0.3.1。

【问题讨论】:

    标签: angularjs asp.net-mvc iis asp.net-mvc-5 angular-ui-router


    【解决方案1】:

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

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

    我应该注意,我避免在 UI-Router 中使用 HTML5 模式的原因是为了保持浏览器的兼容性。如果启用了 HTML5 模式,那么对于兼容 HTML5 的浏览器,该问题将得到解决。但是,非 HTML5 浏览器会回退到 URL 中的#,从而破坏应用程序。

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 2010-09-11
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      相关资源
      最近更新 更多