没有MVC的.Net Core 2路由



我正在尝试创建一个简单的.Net Core 2应用程序,该应用程序具有Angular前端和api/db后端。

我不想使用MVC,因为我不需要典型的点网视图或模型,但我在提供index.html文件和将api调用路由到控制器时遇到了问题。

我知道它在program.cs中的某个地方,涉及路线,但我一直很难找到关于如何在不使用mvc包的情况下做我想做的事情的文档。

简单地说,这里又是我的要求:

  1. 在路由到根时提供我的angular index.html文件(让angular处理那里的其余路由)
    1. 将my/api路由路由到c#dot网络控制器
    2. 不使用MVC

谢谢!

您可以使用UseRouter()中间件直接显式映射路由,作为应用程序配置管道的一部分。

例如,下面创建一个自定义路由来处理Lets Encrypt请求,如果启用任何其他路由,默认情况下该请求将失败。以下代码进入服务器的Startup类的Configure()方法:

// Handle Lets Encrypt Route(before MVC processing!)
app.UseRouter(r =>
{
r.MapGet(".well-known/acme-challenge/{id}", async (request, response, routeData) =>
{
var id = routeData.Values["id"] as string;
var file = Path.Combine(env.WebRootPath, ".well-known", "acme-challenge", id);
await response.SendFileAsync(file);
});
});

这使得简单的路由场景或将请求转发到其他处理程序变得非常容易。

请注意,这是一个原始接口,它不包括任何超出原始请求/响应语义的输入或输出处理。

如果你正在使用API风格的数据做任何事情,那么我仍然建议你使用MVC和控制器来处理你必须自己构建的各种事情。在Core中,API和MVC运行相同的Controller管道,因此您可以将MVC视为Web API和MVC的结合。

对于大多数常见的用例,使用MVC仍然是一条路要走。上述方法非常适合微服务或一次性请求,因为这可能会为您带来一点性能提升,因为它不必加载任何MVC位或激发到该管道中,但您要负责自己的序列化和请求处理。

作为一种替代方案,您可以始终使用.AddMvcCore()激活MVC,并使用.AddJsonFormatters()打开JSON格式化程序(我假设您的API将是JSON)。

在这种情况下,您将继承ControllerBase而不是Controller

如果您启用了静态文件,您只需将index.html放在webroot(wwwroot)的顶层,它将作为默认文档。Angular应用程序将接管它们,与您在后端构建的API进行交互。

最新更新