我想实现我的web服务的控制器的选项方法将返回包含与控制器相关的URI的端点有效的HTTP方法的消息。 我的选择方法看起来是这样的:
public HttpResponseMessage Options()
{
var resp = new HttpResponseMessage();
resp.Content = new StringContent("");
var apiExplorer = GlobalConfiguration.Configuration.Services
.GetApiExplorer();
foreach (ApiDescription api in apiExplorer.ApiDescriptions)
{
resp.Content.Headers.Add("Allow", api.HttpMethod.Method);
}
return resp;
}
我曾尝试在一个全新的Web API项目上面的方法:用GET,POST和DELETE方法的控制器内(蕴涵不变的路由)。 正如预期的那样,与“允许:GET,POST,DELETE”一个响应返回。 我有麻烦,然而,增加这是我工作的一个大项目。 在较大的项目中,内ApiExplorer的ApiDescriptions列表中不包含任何元素。 为什么是这样? 我怀疑这是由于已实施的自定义路由,虽然这种怀疑的唯一依据是以下链接:
http://forums.asp.net/t/1821651.aspx/1
有其他人遇到这个空ApiDescription名单? 如果是的话,你找到一个补救措施?
注:我用MCV 4 RC
如果您使用的一瞥,你可能需要禁用它的路线检查:
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<logging level="Off" />
<tabs>
<ignoredTypes>
<add type="Glimpse.AspNet.Tab.Routes, Glimpse.AspNet" />
</ignoredTypes>
</tabs>
<inspectors>
<ignoredTypes>
<add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet" />
</ignoredTypes>
</inspectors>
</glimpse>
管窥创建于HostedHttpRouteCollection打破枚举RouteProxies: https://github.com/mono/aspnetwebstack/blob/master/src/System.Web.Http.WebHost/Routing/HostedHttpRouteCollection.cs
我知道这个链接是单声道,但同样适用于标准的.NET。
你应该看看升级到这是昨天发布的,然后检查了新发布的WebAPI的RTM ASP.NET的WebAPI帮助页面(预览版)这是昨日也发布了。
本软件包自动生成您的网站的Web API的帮助页面的内容。 游客到您的帮助页面可以使用这个内容来学习如何调用您的Web的API。 通过帮助页面产生的一切使用ASP.NET MVC和刀片是完全可定制。
它执行的是在幕后的ApiExplorer。
这个问题的解决办法是在项目名\区\ HelpPage \控制器评论\ HelpController.cs的构造是这样的:
public class HelpController : Controller
{
private const string ErrorViewName = "Error";
// public HelpController()
// : this(GlobalConfiguration.Configuration)
// {
// }
// public HelpController(HttpConfiguration config)
// {
// Configuration = config;
// }
/// <summary>
/// GlobalConfiguration By default
/// </summary>
protected static HttpConfiguration Configuration
{
get { return GlobalConfiguration.Configuration; }
}
public ActionResult Index()
{
ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
}
....
默认的构造不叫;
第二种方法是注入默认构造通过添加此属性[InjectionConstructor]在这样默认的构造:
public class HelpController : Controller
{
private const string ErrorViewName = "Error";
[InjectionConstructor]
public HelpController()
: this(GlobalConfiguration.Configuration)
{
}
public HelpController(HttpConfiguration config)
{
Configuration = config;
}
/// <summary>
/// GlobalConfiguration By default
/// </summary>
protected static HttpConfiguration Configuration { get; private set; }
....