今天在写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(Action<IRouteBuilder>)
方法提供一个路由配置委托来配置路由。image.png.png
当然,也可以使用 UseMvcWithDefaultRoute()
方法提供一个默认路由。
网友评论