在web api中修改并重定向未找到的URl

时间:2015-04-29 03:31:40

标签: asp.net angularjs asp.net-web-api asp.net-web-api-routing

我在角度为我的项目启用了Html5模式,从

转换我的URl

A:qwe.com/#/products

B:qwe.com/products

但问题是在这种情况下,如果用户试图直接转到B,服务器(web api)捕获Url并返回未找到错误,所以我需要一种方法来捕获服务器中找不到的所有内容并重定向到新的Url,但我应该怎么做?

更新

感谢@Travis Collins

在Global.asax

private const string ROOT_DOCUMENT = "/index.html";

protected void Application_BeginRequest( Object sender, EventArgs e )
{
   string url = Request.Url.LocalPath;
   if ( !System.IO.File.Exists( Context.Server.MapPath( url ) ) )
       Context.RewritePath( ROOT_DOCUMENT );
}

1 个答案:

答案 0 :(得分:2)

您需要在服务器端进行重写。这将使Web服务器仍然为index.html文件提供服务,即使是/ products或其他任何内容的请求。例如,在IIS中,您将在web.config中执行此操作:

<system.webServer>
  <rewrite>
    <rules> 
      <rule name="Main Rule" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />                                 
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

这里解释了很多其他服务器: https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode