当前位置: 首页 > 编程语言 > C#

如何向ASP.NETWebAPI控制器添加自定义方法?分享

时间:2023-04-10 11:08:57 C#

如何向ASP.NETWebAPI控制器添加自定义方法?在ASP.NETMVCWebAPI项目中,我们默认创建了如下控制器publicclassValuesController:ApiController{//GETapi/valuespublicIEnumerableGet(){returnnewstring[]{"value1","value2"};}//GETapi/values/5publicstringGet(intid){return"value";}//POSTapi/valuespublicvoidPost([FromBody]stringvalue){}//PUTapi/values/5publicvoidPut(intid,[FromBody]stringvalue){}//DELETEapi/values/5publicvoidDelete(intid){}}但是可以在此处添加任何自定义方法以便它们也可以支持get/post吗?谢谢!您可以使用类型为Http的RoutePrefix等属性。[Route("ChangePassword")][HttpPost]//有HttpGet、HttpPost、HttpPut、HttpDelete。publicasyncTaskChangePassword(ChangePasswordModelmodel){}http类型将与Route名称组合以将其映射回正确的方法。我不确定我是否遵循,因为您的代码中有GET和POST,但无论如何您还有其他选项:选项1首先,您可以在App_Start文件的WebApiConfig.cs文件夹中配置自定义路由。这是我经常使用的://GET/api/{resource}/{action}config.Routes.MapHttpRoute(name:"WebAPIRPC",routeTemplate:"{controller}/{action}",defaults:new{},约束:new{action=@"[A-Za-z]+",httpMethod=newHttpMethodConstraint("GET")});//GET|PUT|DELETE/api/{resource}/{id}/{code}config.Routes.MapHttpRoute(name:"WebAPIResource",routeTemplate:"{controller}/{id}/{code}",默认值:new{code=RouteParameter.Optional},约束:new{id=@"d+"});//GET/api/{resource}config.Routes.MapHttpRoute(name:"WebAPIGetAll",routeTemplate:"{controller}",defaults:new{action="Get"},constraints:new{httpMethod=new}HttpMethodConstraint("GET")});//PUT/api/{resource}config.Routes.MapHttpRoute(name:"WebAPIUpdate",routeTemplate:"{controller}",默认值:new{action="Put"},constraints:new{httpMethod=newHttpMethodConstraint(“放”)});//POST/api/{resource}config.Routes.MapHttpRoute(name:"WebAPIPost",routeTemplate:"{controller}",defaults:new{action="Post"},约束条件:new{httpMethod=newHttpMethodConstraint("POST")});//POST/api/{resource}/{action}config.Routes.MapHttpRoute(name:"WebAPIRPCPost",routeTemplate:"{controller}/{action}",默认值:new{},constraints:new{action=@"[A-Za-z]+",httpMethod=newHttpMethodConstraint("POST")});我使用RESTful端点和RPC端点的组合。对于一些纯粹主义者来说,这是圣战的原因。对我来说,我使用两者的组合,因为它是一个强大的组合我找不到任何好的理由。选项2正如其他人已经指出的,这些天我自己做的更多,使用属性路由:[HttpGet][GET("SomeController/SomeUrlSegment/{someParameter}")]publicintSomeUrlSegment(stringsomeParameter){//dostuff}我需要一个用于属性路由的NuGet包来完成这项工作(只需在NuGet中搜索“属性路由”),但我认为MVC5/WebAPI2本身就有它。希望这个帮助。您可以使用属性路由:[Route("customers/{customerId}/orders")]publicIEnumerableGetOrdersByCustomer(intcustomerId){...}一些帮助您入门的文档:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2首先把这条路由放到webapiconfig.csconfig.Routes.MapHttpRoute(name:"ApiWithAction",routeTemplate:"api/{controller}/{action}/{id}”,默认值:new{id=RouteParameter.Optional});现在你可以像这样向你的控制器添加一个动作[HttpPost]publicvoidUpload(){//Dosomething}我用httppost属性装饰了上传动作,这意味着如果你想这个动作只接受发布请求使用GET,你可以删除属性或者只是装饰你的套件以上是C#学习教程:如何发送ASP。NETWebAPI控制器来添加自定义方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: