我目前正在编写一个单页应用程序,并希望将所有传入请求(/api/{controller} 除外)映射到我的 Web 应用程序到根目录中的静态文件 (index.html)。前端的 WebApi 调用需要能够访问到 /api 的路由。关于如何实现这一目标的任何建议?
问问题
795 次
1 回答
1
您可以使用 IIS 7 url rewrite module
。这个模块是 IIS Express 网络服务器的一部分,所以你不需要任何特别的东西来启用它。在您的生产 IIS 7 服务器上,您可能需要安装并启用the extension
.
只需将以下规则添加到您的<system.webServer>
部分:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<rewrite>
<rules>
<rule name="Rewrite to index.html">
<match url="^(?:(?!api\/))" />
<action type="Rewrite" url="index.html" />
</rule>
</rules>
</rewrite>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
此外,由于您没有使用 ASP.NET MVC,因此您可以删除该~/App_Start/RouteConfig.cs
文件,因为您没有任何 MVC 控制器。只需保留映射到 Web API 控制器~/App_Start/WebApiConfig.cs
的端点路由的位置:~/api
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
于 2013-06-16T09:54:26.010 回答