我目前正在编写单页面应用程序,并希望将所有传入请求(除了/ api / {controller})映射到我的Web应用程序到root中的静态文件(index.html)。前端的WebApi呼叫需要可以访问到/ api的路由。有关如何实现这一目标的任何建议吗?
答案 0 :(得分:1)
您可以使用IIS 7 url rewrite module
。此模块是IIS Express Web服务器的一部分,因此您无需任何特殊操作即可启用它。在生产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控制器。只需保留~/App_Start/WebApiConfig.cs
,您将拥有映射到Web API控制器的~/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 }
);
}
}