c# - 没有 MVC 的 .Net Core 2 路由

标签 c# asp.net-mvc asp.net-core asp.net-core-2.0

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

我不想使用 MVC,因为我不需要典型的点网 View 或模型,但我在提供 index.html 文件以及将 api 调用路由到我的 Controller 时遇到问题。

我知道它在 program.cs 中的某处并涉及路由,但我一直无法找到有关如何在不使用 mvc 包的情况下执行我想要的操作的文档。

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

  1. 在路由到根目录时提供我的 angular index.html 文件(让 angular 处理那里的其余路由)
    1. 将我的/api 路由路由到 c# 点网络 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);
            });
        });

这使得简单路由方案或将请求转发给其他处理程序变得非常容易。

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

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

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

关于c# - 没有 MVC 的 .Net Core 2 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46795976/

相关文章:

c# - 使用 HttpClient 进行 Https 调用

c# - 尝试实现抽象工厂时,对象引用未设置为对象

c# - 为什么我不能在我的 settings.settings 中分配一些类型?

c# - 为什么编译器不在 C# 中将 var[] 转换为 object[]?

asp.net-core - 使用 EF .net 5 在 ASP.NET Core 中使用迷你探查器获取 "Not Found"错误

asp.net-mvc - 如何在.net core中使用redis缓存页面?

c# - 内存流中的电子邮件附件出错,但仅在第一次发送后发生

javascript - 如何使用带有 Razor 的 MVC4 设置 javascript 变量

docker - Docker ASP.NET Core容器在配置的端口上没有响应

c# - ASP.NET Core 2.0 JWT 验证失败,出现 `Authorization failed for user: (null)` 错误