WebAPI HelpPage支持area

开篇:对于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             else
13             {
14                 //若是areas下的controller,将路由格式中的{area}替换为真实areaname
15                 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");

路由配置

时间: 2024-10-12 19:20:07

WebAPI HelpPage支持area的相关文章

WebApi 能支持Session

由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验. 然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asax的Init方法 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configuration.EnableCo

WebAPI CORS 支持跨域POST

网上一般能找到的都是通过Microsoft.AspNet.WebApi.Cors来实现CORS,这是通过dll的方式,然后还有一种是通过config的方式 1.dll方式实现CORS 这种方式的好处就是控制精细,可以对同一个站点下的action分别赋予不同的CORS设置,具体怎么实现这里就不多说了,不了解的可以看http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-05.html 然后这里记录下实际可能会出现的问题 a) System.We

IIS7.5 webapi 不支持 Delete、Put 解决方法

在IIS管理界面选择API的项目,选择 “Features View”. 2.  选择 “Handler Mappings” 菜单. 3. 打开“WebDAV” 选项. 4. 点击 “Request Restrictions” 选项. 5. 选择 “Vebs” 菜单项,选 “All verbs”,保存即可. 这样设置IIS 就支持 Delete 和 Put,你可以不全部放开,放开部分的方法也是可以的.

WebApi Session支持

代码: WebApiConfig using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Web.Http; using System.Configuration; using Microsoft.Owin.Security.OAuth; using Newtonsoft.Json.Serialization; using System.Web.H

webform添加到webapi的支持

1.添加引用 添加对 System.Net.Http , System.Net.Http.Formatting , System.Web.Http , System.Web.Http.Common , System.Web.Http.WebHost 的引用 2.添加 Global Application Class , 并在 Global 类中的 Application_Start 方法中添加如下代码: RouteTable.Routes.MapHttpRoute(    name: "Defa

MVC.Net:WebAPI添加对jsonP的支持

在某些情况下,我们需要在WebAPI项目中添加对jsonP的支持.比如我们同时创建了MVC.Net和WebAPI两个项目,这两个项目使用不同的端口,这时如果MVC.Net项目的前端想要直接访问WebAPI项目,就会出现"cross-origin"的错误.要解决这个问题,我们通常会使用jsonP的方法. 要让WebAPI支持返回jsonP格式,需要的步骤如下: 1. 通过NuGet安装WebApiContrib.Formatting.Jsonp.项目地址:https://github.c

1.3为WebApi创建帮助文档

1.创建 API 帮助页 2.将帮助页添加到现有的项目 3.添加Api文档 4.Under the Hood 当你创建一个网络 API 时,它很有用来创建一个帮助页,以便其他开发人员将知道如何调用您的 API.您可以创建的所有文档手动,但它是自动生成尽可能多地更好. 为了简化这一任务,ASP.NET Web API 提供一个库自动生成帮助页在运行时. 回到顶部 1.创建 API 帮助页 安装ASP.NET和Web Tools 2012.2 Update.此更新集成到 Web API 项目模板的帮

WebAPI生成可导入到PostMan的数据

一.前言 现在使用WebAPI来作为实现企业服务化的需求非常常见,不可否认它也是很便于使用的,基于注释可以生成对应的帮助文档(Microsoft.AspNet.WebApi.HelpPage),但是比较便利和可持久化的调试官方却没有相应的集成,虽然我们可以使  用诸如Fiddler.Swagger.PostMan.HttpClient.单元测试等等来调试我们的WebAPI,但是却依然不是很方便,对于公司来说也需要有一种可以统一.可持久化.且行之有效的规范. 调试接口我希望他能达到以下3点: 1:

WebAPI使用多个xml文件生成帮助文档

一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xml文档来作为数据源从而展示出来的.在我们的项目帮助文档需要的类(特指定义的Request和Response)与项目在同一个项目时是没有问题的,但是我们实际工作中会因为其他项目也需要引用该(Request和Response)时,我们会将其抽出来单独作为一个项目供其它调用来引用,这时,查看帮助文档不会报