Stephen Walther的这篇文章讨论了通过修改web.config system.webServer / rewrite部分来重定向MVC项目中的所有请求。
http://stephenwalther.com/archive/2015/01/16/asp-net-5-and-angularjs-part-3-adding-client-routing
但是,必须将web.config xml文件重新引入ASP.NET 5项目似乎是错误的。
在ASP.NET 5中还有另一种方法吗?也许通过新的config.json?
答案 0 :(得分:18)
在Startup
的{{1}}方法中,Configure
是app
:
IApplicationBuilder
这会将所有其他未处理的请求发送到您的应用程序的根目录。在任何app.Run(context =>
{
context.Response.Redirect("/");
return Task.FromResult<object>(null);
});
或其他中间件注册后,将其置于最后。
请注意,这不会捕获此上方的注册;如果您的服务器上有其他路由(例如控制器操作等),则不会捕获它们。这应该可以很好地利用您不需要排除模式的额外好处,例如示例。
如果您正在为单页应用程序执行此操作,则可能希望允许用户进行深层链接。我使用简单的属性路由:
UseStaticFiles()
这将优先映射默认请求([Route("", Order = -1)]
[Route("{*pathInfo}", Order = 1000)]
public async Task<IActionResult> Index(string pathInfo = "", CancellationToken cancellationToken = default(CancellationToken))
{
return View("UiView");
}
),同时将所有其他请求(允许默认排序等优先级)映射到您的“UiView”。
如果您不想使用属性路由,请使用上述方法并使用以下路由映射:
/
答案 1 :(得分:14)
在SO上找到了这个非常好的答案:https://stackoverflow.com/a/34890926/990356
<强>上下文强>
我有一个SPA应用程序,ASP.NET Core提供一些REST API +'wwwroot / index.html'。
我在SPA应用程序(客户端)内部处理我的路由,当用户使用给定路径刷新浏览器时,它不起作用。
示例:使用URL http://localhost:5000/Account
刷新浏览器会出现404错误,因为服务器上没有文件'wwwroot / Account / index.html',尽管这是客户端应用程序内的有效路由。
<强>解决方案:强>
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
app.UseStatusCodePagesWithReExecute("/");
app.UseDefaultFiles();
app.UseStaticFiles();
}
请注意,订单很重要。
=&GT;这意味着如果路由与服务器上的文件或任何已知的文件(例如REST API)不匹配,则服务器提供“/”('wwwroot / index.html'),同时保持URL不变。
使用React / React Router应用程序和ASP.NET MVC Core 1.1进行测试
答案 2 :(得分:5)
我正在使用vnext在Azure上部署AngularJS应用程序。感谢Matt我能够制作这个片段:
app.Run(context =>
{
if(context.Request.Path.Value != "/api") context.Response.Redirect("/");
return Task.FromResult<object>(null);
}
);
除了我的REST api调用之外,它将所有内容路由到Angular App。
答案 3 :(得分:0)
根据@Matt DeKrey的回答,并在我公司的一位开发人员的帮助下,这里是我如何使用ASP.NET Core 1 MVC将所有请求路由到单个视图。非常适合需要深度链接的Angular2应用程序。
<强> HomeController.cs 强>
内部public class HomeController : Controller
[Route("", Order = -1)]
[Route("{*pathInfo}", Order = 1000)]
public async Task<IActionResult> Index(string pathInfo = ""))
{
return View("View");
}
<强> Startup.cs 强>
内部public void Configure
app.UseMvc(routes =>
{
routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}"
);
});