让我有点生气,希望有人可以帮助我。
使用WebAPI我可以做这样的事情
public class AuthenticationMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage>SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
try
{
var config = GlobalConfiguration.Configuration;
var controllerSelector = new DefaultHttpControllerSelector(config);
var descriptor = controllerSelector.SelectController(request);
var atts = descriptor.GetCustomAttributes<IgnoreValidationAttribute>();
这让我了解了我的属性,我感到高兴和笑容,一切都很好。
但是
使用属性路由,我认为是问题,使用上面的代码或替换
var config = GlobalConfiguration.Configuration;
与
var config = request.GetConfiguration();
我得到零例外,我不那么开心和笑脸。可是一些很棒的人给我一些指导来解决这个问题,因为我很难过。
提前致谢!
答案 0 :(得分:0)
这是我在ASP MVC应用程序中的操作方式,因此我认为应该有一种相似的方法来从Web API中的请求访问描述符。
using System.Web;
using System.Web.Mvc;
private bool HasAttribute<T>()
{
var skip = false;
try
{
var routeDataList = HttpContext.Current.Request.RequestContext.RouteData.Values.Values.First() as IList<System.Web.Routing.RouteData>;
var routeData = routeDataList.First() as System.Web.Routing.RouteData;
var actionDescriptorList = routeData.DataTokens.Values.First() as IList<object>;
var reflectedActionDescriptor = actionDescriptorList.First() as ReflectedActionDescriptor;
skip = reflectedActionDescriptor.GetCustomAttributes(typeof(T), false)
.Any();
}
catch
{
//can't get the attributes; skip should be false
}
return skip;
}