博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebAPI HelpPage支持area
阅读量:5025 次
发布时间:2019-06-12

本文共 2832 字,大约阅读时间需要 9 分钟。

开篇:对于WebApi研究不是很深,刚开始使用,记录自己的解决思路,有更好的处理方式或发现我对WebApi理解有不对的地方恳请指正,谢谢!

环境:WebAPI服务、HelpPage,API路由:“api/{controller}/{action}”,服务与helpPage运行正常,帮助文档页面所有API地址遵循路由格式

问题描述:当两个area下出现同名的controller/action时,生成的帮助文档页面API地址会一模一样,请求出错

解决思路:将路由定义为“api/{area}/{controller}/{action}”,已区分不同的area,但测试后发现HelpPage页面生成的API地址中“{area}”部分无法替换为正确的名称,尝试良久,终于解决,将解决过程列出如下:

1.WebApiConfig 修改api路由如下

1 config.Routes.MapHttpRoute(2                 name: "DefaultApi",3                 routeTemplate: "api/{area}/{controller}/{action}/{id}",4                 defaults: new { id = RouteParameter.Optional }5             );
Routes

 

2.修改helpPage下的ApiDescriptionExtensions,在GetFriendlyId中加入如下处理

1 public static string GetFriendlyId(this ApiDescription description) 2         { 3             //获取controller的fullname 4             string controllerFullName = description.ActionDescriptor.ControllerDescriptor.ControllerType.FullName; 5             //匹配areaName 6             string areaName = Regex.Match(controllerFullName, @"Area.([^,]+)\.C").Groups[1].ToString().Replace(".",""); 7             if (string.IsNullOrEmpty(areaName)) 8             { 9                 //若不是areas下的controller,将路由格式中的{area}去掉10                 description.RelativePath = description.RelativePath.Replace("{area}/", "");11             }12             else13             {14                 //若是areas下的controller,将路由格式中的{area}替换为真实areaname15                 description.RelativePath = description.RelativePath.Replace("{area}", areaName);16             }17 }
ApiDescriptionExtensions

 

3.HelpController下的API  action调整

1 public ActionResult Api(string apiId) 2         { 3             if (!String.IsNullOrEmpty(apiId)) 4             { 5                 HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId); 6                 if (apiModel != null) 7                 { 8                     //防止生成帮助文档时将area作为了Uri参数 9                     foreach (var item in apiModel.UriParameters)10                     {11                         if (item.Name.Equals("area"))12                         {13                             apiModel.UriParameters.Remove(item);14                             break;15                         }16                     }17 18                     return View(apiModel);19                 }20             }21 22             return View(ErrorViewName);23         }
Api

 

至此修改完成,运行后在help页面,API地址显示正常,TestAPI测试通过

另外,看到有人使用RoutePrefix和Route等路由新特性处理的,没试过,有时间再研究一下

 

题外:运行WebAPI后直接显示Help页面

1 routes.MapRoute(2                 name: "Default",3                 url: "{controller}/{action}/{id}",4                 defaults: new { controller = "Help", action = "Index", id = UrlParameter.Optional },5                 namespaces: new string[] { "HelpController命名空间" }6             ).DataTokens.Add("Area","HelpPage");
路由配置

 

转载于:https://www.cnblogs.com/xihao/p/6892192.html

你可能感兴趣的文章
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
linux支持FTP和SFTP服务【1】
查看>>
树的递归与非递归遍历方法
查看>>
每天一个Linux命令(6):rmdir命令
查看>>
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>
使用vbs或者bat脚本修改IE浏览器安全级别和选项
查看>>
Silverlight入门
查看>>
Silverlight动态调用WEBSERVICE,WCF方法
查看>>
LeetCode 895. Maximum Frequency Stack
查看>>
模仿segmentfault 评论
查看>>
一个简单的日志函数C++
查看>>
Java 8 中如何优雅的处理集合
查看>>
IOS程序的启动过程
查看>>
连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
查看>>
Java操作Excel和Word
查看>>