一、认识IHttpActionResult
哈喽!你用过ASP.NET Core里那个叫’IHttpActionResult’的东东吗?超赞的,处理HTTP请求全靠它。无论是GET还是POST都没问题。而且,它还能搞定JSON、XML这些格式的数据,真的很方便。尤其在做RESTful API时,这种格式的数据可是必备的哟。
哥们们,你们可要记住,IHttpActionResult这个大家伙里还隐藏着个小机灵鬼——OkResult!它就是告诉咱们请求成功的信号灯!这时候,服务器就会给咱们发个200的状态码,意思是“没问题,一切都好”。但是如果找不到资源或者请求出错了,也不用担心,NotFoundResult和BadRequestResult这两个小伙伴随时待命,看情况选一个就行~
二、使用[FromBody]和[FromQuery]特性
想搞定ASP.NET Core API控制器的请求参数怎么办?别慌,有两个属性[FromBody]和[FromQuery]帮你忙!前者在请求body里找,后者就在query string里拿哦~
比如说,来了个POST的请求,咋从里面搞出那个Person对象捏?简单得很!只需要加这几个字:public IActionResult Post([FromBody] Person person)。这时ASP.NET Core就会帮你搞定了,它会去解析请求里的JSON数据,然后自动把它们变成Person对象。
想用GET方法拿到personID吗?就这么简单!然后,根据约定,网线核心会帮你把查询字符串里的id换成int型的personId
三、处理参数不在同一文件下的问题
老是碰到“参数不见了”这种事,你烦不烦啊?比如前端的Javascript找不到后台的C#,咋整呀?别急,这就是我要告诉你的小技巧!
嘿 AJAX:其实我们自己不用来搞什么复杂流程,直接动动手利用AJAX技术就成啊!比如,在JS里轻轻一点,我们就可以轻松地从后台的C#代码那边拿到我们想要的数据。
javascript function getParam() { $.ajax({ url: '/api/person', method: 'GET', success: function(data) { console.log(data); } }); }
首先,在我们的后台C#那儿,把要用到的参数传到Cookie里。接着,就可以去JavaScript那一边,用document.cookie找出来并处理!举个例子,比如这么做:
//code here
“`csharp
Cookie里的”personId=123″是这么来的,原来我们只是把”personId”放进去而已。
然后在JavaScript中:
咱们得找个名叫’人ID’的东东!关键就在那些cookie里找含有一句’startwith=”personid=’的部分,然后再抓出那后面紧跟的一串数字就行。
console.log(personId);
HTML5中有个叫WebStorage的牛逼东西!咱们想要传的那些参数,都能偷偷藏在LocalStorage或者SessionStorage里面,然后再用JavaScript轻轻松松把它弄出来.就好比这样做:
把”123″存进本地存储的”personId”里去。
快来找出我的ID在哪里吧~就在这个本地存储里的「personId」这里!
四、处理复杂参数
当用到那些很复杂的API参数时(比如嵌套的对象或者数组之类),有几个小技巧可以帮到你!
直接把那些麻烦的参数扔进DTOSclass里头,再给API设置下接收位不就行?比如这样:
public class PersonDto
{
public int Id { get; set; }
名字就叫Name,可以随便改。
获取地址的公共成员:Address 用来存储和设置数据。
public class Address
共享的字符串变量:街道,是可以获取和设置的。
咱们这的公共属性City,可以随意访问和修改。
然后在API中:
记得这个接口传递的是叫personDto的东西,这个就是管理员用来处理我们在body里面传过来的PersonDto信息的。
// 处理personDto
看看我还能自定义个ModelBinder解决各种烦人的参数问题,比如嵌套对象什么的都不用怕了~
来给大家聊聊ModelBinder这个神器,也就是所谓的特殊IModelBinder!
听过这个没?就是绑定了模型和视图模板~
{
var person = new Person
{
我们把’Id’这个值从数据源里取出来,然后变成整数。
名字,简单说就是从那个叫BindingContext.ValueProvider里找到的头一个数值。
Address = new Address
{
这个地方就是咱们之前提到的那条街,位于”地址.街区”的首位。
城市就在“地址”那部分,去查下就知道了。
}
};
就直接给绑定上下文的结果加个”成功”,把这个人放进去。
return Task.CompletedTask;
}
[HttpPost]
这里收集你的个人信息超简单,直接把你的表单给我们在这个网址(http://www.example.com/persons)上一传就好啦!
// 处理person
五、处理参数验证
记住做API开发时别忘了做参数验证哦~也就是看看用户输入的参数格式、范围是否正确。ASP.NET Core里有许多便捷的验证特性,像是[Required]、[Range]、[StringLength]之类的,用起来超方便!
那么你知道吗,如果我们有个叫 Person 的朋友的话,那就不能让他们的姓名栏里是空白对?其实很简单,只需要这么做:
$.ajax({ url: 'http://localhost:5000/api/person?id=1', type: 'GET', success: function(data){ functionName(data); } });
public class Person
[Required]
大家好,给我传下个人信息用POST的方式喔!
if (!ModelState.IsValid)
直接告诉他们“请求错误(模型状态)”就搞定。
六、处理异常
说到API开发,处理异常可不就是个坎儿吗?翻来覆去的异常得想办法解决,咱们的API才能稳稳地运行ASP.NET Core可是有很多好用的工具帮忙,像那个[ApiController]和ExceptionFilter就挺不错的。
接下来咱们聊聊这个[ApiController]是个啥玩意儿。有了它,好多问题都能迎刃而解哦:
[ApiController]
[Route(“api/[controller]”)]
这儿就有个名叫PersonController的控制器,这玩意儿是在它爸爸ControllerBase那儿学来的。
[HttpPost]
只需告诉我你在Person类上打了啥数据嘛! 记得把它放到Post查询里面!
// 处理person
此外,我们还能搞个Filter来抓取和处理自定义错误:
哈喽!这儿有个CustomExceptionFilter,解决问题就是小菜一碟!
碰到怪事了?OnException这招管用!
要是遇到CustomException的话,就这么办。
出错了!我得到了个bad request object result的消息,里面提示说犯错是因为exception的msg。
咱们就在 Startup.cs这儿加个 Exception Filter吧:
这儿,咱们只需把controller服务装进去就成了。
options.Filters.Add<CustomExceptionFilter>();
});
七、处理跨域请求
不用担心遇到跨域请求问题!简单操作就能解决,例如启用[EnableCors]或者设置CorsPolicy即可。
我们激活这个“启用CORS”的功能后,任何网站都能自由使用咱们的API!
[EnableCors(“AllowAll”)]
然后在Startup.cs中配置CorsPolicy:
services.AddCors(options =>
“选项里加上’允许所有’策略,这样就对了。”
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
八、处理限流
想要提升API效率,其实很简单,试试“限流”功能呗!设定API只让特定次数请求不就行了,有效防止骚扰或服务器超负荷。现在市场上这类工具一大堆,比如用ASP.NET Core里的RateLimit中间件与RateLimitPolicy配置啥的。
我们都想知道,拿哪种RateLimit的插件能管住API的使用次数?
快来装个限速小助手!新版本的RateLimitOptions用起来更舒服!
把那个叫GlobalLimiter的东西搬到另一边,就是现在的ConcurrencyLimiter和其他相关的设定那里。
PermitLimit = 10,
QueueLimit = 5,
队列处理顺序设定成了”老大哥优先哦”!
})
[‘启用限速'(‘我的策略’)]
九、处理缓存
你平时是不是也喜欢用缓存模式?这样能增强API!通常我们会利用ASP.NET Core里的内置函数,像用ResponseCache特性或设置缓存profile之类的办法来实现。
ResponseCache就是个好帮手,它能帮我们缓存API返回结果哒~
咱们这儿搞个1分钟的缓存吧(就是60秒),定位就用默认那个就行了。
[HttpGet]
public IActionResult Get()
// 处理请求
然后在Startup.cs中配置CacheProfile:
你只需要把新的缓存设置塞到”默认”设置里,就搞定了!就是这么简单:options.CacheProfiles.Add(“默认值”, 新缓存配置)
Duration = 60,
位置就是回应有高速缓存的地方。
十、总结
搞定asp.net core API的参数,可不是件轻松事!要应对各种情况,如[FromBody]和[FromQuery]属性解决麻烦的参数,确保参数无误,处理可能出现的错误,跨域请求等,还得防止流量过大,合理利用缓存等。这样才能让我们的API更稳固,开发起来也更顺手!
咱说好了最后能不能跟我说一件事,那就是你们做项目时有没有遇到过API参数处理的困扰?后来是咋解决的?要是你有啥好办法就赶紧在评论区分享出来!别忘了给这篇文章点个赞,然后分享出去!
原文链接:https://www.icz.com/technicalinformation/web/2024/07/19242.html,转载请注明出处~~~
请先
!