asp.net-web-api – 基于参数类型重载Web api操作方法
发布时间:2020-12-16 00:26:46 所属栏目:asp.Net 来源:网络整理
导读:有没有办法执行基于参数类型的Action方法的重载? 即可以在控制器中执行以下操作 public class MyController : ApiController{ public Foo Get(int id) { //whatever } public Foo Get(string id) { //whatever } public Foo Get(Guid id) { //whatever }}
有没有办法执行基于参数类型的Action方法的重载?
即可以在控制器中执行以下操作 public class MyController : ApiController { public Foo Get(int id) { //whatever } public Foo Get(string id) { //whatever } public Foo Get(Guid id) { //whatever } } 如果是这样,需要对Route表进行哪些更改。 解决方法
标准路由方法不能很好地支持这种情况。
您可能想要使用attribute based routing,因为这样可以让您有更多的灵活性。 具体看看你可以通过类型路由的路由约束: // Type constraints [GET("Int/{x:int}")] [GET("Guid/{x:guid}")] 还有什么会变成一个黑客… 如果您尝试使用标准路由,您可能需要通过其名称路由到正确的操作,然后使用reg ex的约束(例如guid)路由到所需的默认操作。 控制器: public class MyController : ApiController { [ActionName("GetById")] public Foo Get(int id) { //whatever } [ActionName("GetByString")] public Foo Get(string id) { //whatever } [ActionName("GetByGUID")] public Foo Get(Guid id) { //whatever } } 路线: //Should match /api/My/1 config.Routes.MapHttpRoute( name: "DefaultDigitApi",routeTemplate: "api/{controller}/{id}",defaults: new { action = "GetById" },constraints: new { id = @"^d+$" } // id must be digits ); //Should match /api/My/3ead6bea-4a0a-42ae-a009-853e2243cfa3 config.Routes.MapHttpRoute( name: "DefaultGuidApi",defaults: new { action = "GetByGUID" },constraints: new { id = @"^({{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}}{0,1})$" } // id must be guid ); //Should match /api/My/everything else config.Routes.MapHttpRoute( name: "DefaultStringApi",defaults: new { action = "GetByString" } ); 更新 我通常会使用一个POST,如果做一个FromBody(可能使用与该模型的FromUri),但您的要求可以通过添加以下来满足。 对于控制器 [ActionName("GetAll")] public string Get([FromBody]MyFooSearch model) { if (model != null) { //search criteria at api/my } //default for api/my } //should match /api/my config.Routes.MapHttpRoute( name: "DefaultCollection",routeTemplate: "api/{controller}",defaults: new { action = "GetAll" } ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core-mvc – 如何在Asp.Net Core MVC 1.0(又名MVC
- asp.net – 是否有可能欺骗或重用VIEWSTATE或检测它是否受到
- ASP.NET服务器迁移
- asp.net – 动态创建的LinkBut??tons的OnClick事件不起作用
- ASP.NET Core:部署项目到Ubuntu Server
- asp.net-mvc – 部署网站的最佳方式 – 应用程序池启动停止
- asp.net – 如何从RouteData获取路由名称?
- asp.net – 使用codebehind显示隐藏div
- asp.net – 允许远程访问IIS 7.5
- asp.net-mvc – 我如何可以渲染局部视图在asp.net mvc 3
推荐文章
站长推荐
- asp.net – 多语言网站随机改变语言
- asp.net-mvc – @ Html.BeginForm()如何工作?
- asp.net – 无法安装Microsoft.AspNet.Razor 3.0
- asp.net-mvc-4 – 如果使用实体连接字符串(与SQL
- asp.net-mvc-3 – 如何挂钩错误的jQuery验证不引
- 在Textbox asp.net上使用JQuery DatePicker
- asp.net – Alpha Five Version 10如何开发Web应
- asp.net-mvc-4 – 无法获取MVC 4 FileExtensions
- asp.net-mvc – 将ASP.NET MVC布局应用于Jquery.
- asp.net-mvc – 在MVC5中呈现Razor的部分视图
热点阅读