社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
Web Application包括WebAPI与MVC项目。在Asp.net Core中已经开始共用了。
使用最新版本2.2,创建API项目,至于Docker及Https暂时忽略即可。
这个特性路由的Name字段用于标志一串路由地址。
需要根据名称获取路由地址的时候就方便多了。
云服务是一个趋势,Net core的重构也是为了拥抱Linux和Docker
所以,脱离图形界面,使用命令行托管,Program入口就很重要了。
namespace CoreBackend.Api
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
以上代码只是设置了程序入口,开始托管程序。UseStartUp用于加载Startup类中的配置。
这个类主要是涉及依赖的添加及使用,配置Asp.Net 处理管道。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//判断是否是环境变量
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//这个就是一个简单的中间件写法
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
核心就两个方法:ConfigureServices配置依赖,Configure配置管道。
最终的Startup的样子:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// 在非开发环境中,使用HTTP严格安全传输(or HSTS) 对于保护web安全是非常重要的。
// 强制实施 HTTPS 在 ASP.NET Core,配合 app.UseHttpsRedirection
app.UseHsts();
}
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1");
c.RoutePrefix = "";
});
app.UseAuthentication();
//跨域第一种版本,请要ConfigureService中配置服务 services.AddCors();
app.UseCors(options => options.WithOrigins("http://localhost:8021").AllowAnyHeader()
.AllowAnyMethod());
// 跳转https
app.UseHttpsRedirection();
// 使用静态文件
app.UseStaticFiles();
// 使用cookie
app.UseCookiePolicy();
// 返回错误码
app.UseStatusCodePages();//把错误码返回前台,比如是404
app.UseMvc();
}
在ConfigureServices中添加MVC中间件:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); // 注册MVC到Container
}
在Configure中使用MVC:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
在控制器上的特性路由相当于本控制器的全局路由,配置以后该控制器下的方法前缀都是这个配置。
上面注释掉的那个特性路由采用的是硬编码的方式,不利于扩展。使用[controller]会自动替换成控制器名称。
这个ErrorMessage可以使用参数, {0}表示Display的Name属性, {1}表示当前注解的第一个变量, {2}表示当前注解的第二个变量.
ModelState是验证信息,isValid是验证通过。[FromBody]是自动从请求体绑定内容到DTO:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!