美文网首页.NetcoreAsp.net开发.NET Core
IApplicationBuilder.UseMvc()和IAp

IApplicationBuilder.UseMvc()和IAp

作者: Weidaicheng | 来源:发表于2018-06-11 21:15 被阅读6次

    今天在写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<Startup>()
                .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 特性。

    UseMvc().png
    UseMvc(Action<IRouteBuilder>) 方法提供一个路由配置委托来配置路由。
    image.png.png

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

    UseMvcWithDefaultRoute().png

    相关文章

      网友评论

        本文标题:IApplicationBuilder.UseMvc()和IAp

        本文链接:https://www.haomeiwen.com/subject/jvqkeftx.html