繁体   English   中英

没有MVC的.Net Core 2路由

[英].Net Core 2 Routing without MVC

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

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

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

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

  1. 路由到根时提供我的angular index.html文件(让angular处理其余的路由)
    1. 将my / api路由路由到ac#dot net controller
    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并使用.AddMvcCore()打开JSON格式化程序(我假设您的API将是JSON .AddJsonFormatters()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM