我在Visual Studio 2012中有一个WebApi项目。我是从模板创建的,然后通过使用NuGet添加到HelpPage中。以下是我的例子。
HierarchyController.cs
public class HierarchyController : ApiController
{
[ActionName("DefaultAction")]
public List<Hierarchy> Get([FromUri]List<Guid> guid)
{...}
[HttpGet]
public List<Hierarchy> Children([FromUri]List<Guid> guid)
{...}
[HttpGet]
public List<Hierarchy> Descendants([FromUri]List<Guid> guid)
{...}
[ActionName("DefaultAction")]
public HttpResponseMessage Post([FromBody]List<Hierarchy> hierarchies)
{...}
[ActionName("DefaultAction")]
public HttpResponseMessage Delete([FromUri]List<Guid> guid)
{...}
}
WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{guid}"
);
config.Routes.MapHttpRoute(
name: "GuidApi",
routeTemplate: "api/{controller}/{guid}",
defaults: new { action = "DefaultAction", guid = RouteParameter.Optional }
);
}
}
来自... / help
的结果层次
API --------------------------说明
GET api / Hierarchy -------通过guid获取层次结构
POST api / Hierarchy -----没有可用的文档。
DELETE api / Hierarchy - 删除层次结构
帮助页面中缺少两个“操作”功能。知道我错过了什么吗?
此外,一切确实正常运行,显示所有内容的帮助页面是唯一的问题。
我还为第二个问题定义了每个函数的xml注释,例如
/// <summary>
/// Deletes Hierarchy(s)
/// </summary>
/// <param name="guid">List of Hierarchies</param>
/// <returns>HttpResponseMessage</returns>
他们都是在VS2012中自动生成的,只需输入///
然后填写这些部分,但是Post的帮助页面部分总是说“没有可用的文档”。这是因为我没有修复application/x-www-form-urlencoded
标签下显示的问题(不能使用formmater'JQueryMvcFormUrlEncodedFormatter'错误)?
答案 0 :(得分:10)
关于第一个问题:
List<Guid>
即使用FromUri修饰也不能像你期望的那样受到模型限制。这是一个最近修复的错误,我认为你正在使用以前的版本位,因此可能无法看到这个。您可以通过更改[FromUri]List<Guid> guid
的所有匹配项来查看我的意思,让我们说string guid
。您现在应该在帮助页面中看到所有路线。顺便说一句,ApiExplorer探索每条路线,并为每条路线探索该路线上所有可到达的控制器。所以,你会看到的结果可能会令人惊讶,但是正确的......只是fyi。
关于第二个问题:
有关操作的文档是从编译项目时生成的文档文件中获取的。您可以通过执行以下操作来启用它:项目属性|建立|输出|检查'Xml文档文件'
现在取消注释'Areas \ HelpPage \ App_Start \ HelpPageConfig.cs'文件中的以下行并设置文档文件位置的相应路径
//// Uncomment the following to use the documentation from XML documentation
//config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));