没有 MVC 的 .Net Core 2 路由

blu*_*rbo 4 c# asp.net-mvc asp.net-core asp.net-core-2.0

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

我不想使用 MVC,因为我不需要典型的 dot net 视图或模型,但是我无法提供 index.html 文件并将 api 调用路由到我的控制器。

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

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

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

谢谢!

Ric*_*ahl 6

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

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

        // 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);
            });
        });
Run Code Online (Sandbox Code Playgroud)

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

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

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

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