IApplicationBuilder.UseMvc()和IApplicationBuilder.UseMvc(Action)

今天在写Jwt.Extensions项目的单元测试的时候,由于需要测试继承自 Controller 中的方法,所以需要一个web mvc项目。在之前的mvc项目建立的时候要不就是使用Visual Studio直接建立要不就是使用 dotnet new mvc,没有从无到有手写一个。
先贴一下主要代码。
Program.StartWebApp启动web程序:

public class Program
{
    public async static Task StartWebApp()
    {
        await Task.Run(() =>
        {
            WebHost.CreateDefaultBuilder()
            .UseStartup()
            .Build()
            .Run();
        });
    }
}

Staup类添加配置:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        
        services.AddJwt(options =>
        {
            options.SecretStr = "secret";
            options.RedirectUrl = "/Test/Error";
            options.Bearer = TokenBearer.QueryString;
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }
}

这是最开始添加的,看起来很正常,但是添加控制器之后在测试中报错找不到访问的页面,于是查看其他的mvc项目发现 UseMvc 部分的写法与我写的不同,于是对以上代码进行修改(暂时先不要管原理),如下:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}");
});

测试可以正常进行。


查看Mvc源代码发现 UseMvc() 方法不会提供默认路由,只能使用特性路由,即需要手动添加 Route 特性。

IApplicationBuilder.UseMvc()和IApplicationBuilder.UseMvc(Action<IRouteBuilder>)_第1张图片
UseMvc().png

UseMvc(Action) 方法提供一个路由配置委托来配置路由。
IApplicationBuilder.UseMvc()和IApplicationBuilder.UseMvc(Action<IRouteBuilder>)_第2张图片
image.png.png

当然,也可以使用 UseMvcWithDefaultRoute() 方法提供一个默认路由。

IApplicationBuilder.UseMvc()和IApplicationBuilder.UseMvc(Action<IRouteBuilder>)_第3张图片
UseMvcWithDefaultRoute().png

你可能感兴趣的:(IApplicationBuilder.UseMvc()和IApplicationBuilder.UseMvc(Action))