添加一个控制器类(controller class)的注意事项:
1.在Web API中控制器类要有 "controller"后缀
2.这个类必须继承ControllerBsse
3.在这个控制器上使用ApiController属性
4.使用Routing属性
ContrllerBsse?
ContrllerBsse 类中we提供了很多方法和属性去处理HTTP请求
ApiController作用
1.对路由(routing)属性要求
2.处理客户端错误,即400 status code
3.多部分(Multipart)/表单数据(form-data)请求推断
4.使用更多属性将传入的数据与参数绑定
第一步、选中Controllers文件右键—>添加—>新建基架
第二步、选择API控制器—>下一步
第三步、输入名称—>完成
打开脚本添加 Get() 方法如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MyWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
public string Get()
{
return "Hello TestController";
}
}
}
运行结果
它会默认执行Get方法
如果再添加一个Get1方法,如下代码所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MyWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
public string Get()
{
return "Hello TestController Get";
}
public string Get1()
{
return "Hello TestController Get1";
}
}
}
然后运行,结果如下:
HTTP 500错误,全称为HTTP 500 Internal Server Error,即HTTP 500内部服务器错误
然后在Startup.cs脚本中Configure方法中加入开发者异常页面显示的代码如下:
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endponits =>
{
endponits.MapControllers();
});
}
然后运行,结果如下:
也就是说这个请求匹配了多个端点(endpoint),他分不清请求的这个端,是Get方法还是Get1方法,每个端只能对应一个方法。
然后我们在修改一下TestController.cs脚本,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MyWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
public string Get()
{
return "Hello TestController Get";
}
[Route("1")]
public string Get1()
{
return "Hello TestController Get1";
}
}
}
运行结果就正常了:
Get:
Get1:
还可以直接使用方法名称来获取端点,请求Http。
然后对TestController.cs脚本,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MyWebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
public string Get()
{
return "Hello TestController Get";
}
public string Get1()
{
return "Hello TestController Get1";
}
}
}
运行结果,如下:
Get:
Get1:
注意: 这里的请求路径Get/Get1也可以是小写的
下一节:Web API学习笔记(五)——中间件(Middleware)和HTTP请求管线(Http Request Pipeline)