首页新闻找找看学习计划

webapi中如何使用特性路由?(已经使用了NamespaceHttpControllerSelector)

0
悬赏园豆:30 [已解决问题] 解决于 2015-11-10 17:42

在webapi中已经使用了NamespaceHttpControllerSelector来控制版本问题,但是在想在此基础上访问利用特性路由,出现404未找到action的错误,求助怎么破?

重谢。

Cboii的主页 Cboii | 初学一级 | 园豆:137
提问于:2015-11-06 15:41
< >
分享
最佳答案
0

自定义ApiControllerActionSelector,重写SelectAction方法,调用base.SelectAction(),并捕获HttpResponseException,判断HttpStatusCode值是否是404,最后应用该Selector

收获园豆:30
jello chen | 大侠五级 |园豆:7091 | 2015-11-06 16:20

你好,前两天看到你的回复了。但是我也是刚做接口,有些不太明白Webapi的一些问题。例如怎么捕获HttpResponseException,判断HttpStatusCode值是否是404等。麻烦你能用一段简单的代码演示一下吗?

Cboii | 园豆:137 (初学一级) | 2015-11-09 10:21

@AzureSky: 

1.自定义IHttpActionSelector

public class NotFoundHttpActionSelector : ApiControllerActionSelector
    {
        public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext)
        {
            HttpActionDescriptor descriptor = null;
            try
            {
                descriptor = base.SelectAction(controllerContext);
            }
            catch (HttpResponseException ex)
            {
                var statusCode = ex.Response.StatusCode;
                if (statusCode != HttpStatusCode.NotFound && statusCode != HttpStatusCode.MethodNotAllowed) throw;
                //这里可以转到错误处理的Action
            }
            return descriptor;
        }
    }

2.在Application_Start中注册

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            var config = GlobalConfiguration.Configuration;
            config.Services.Replace(typeof(IHttpActionSelector),
                new NotFoundHttpActionSelector());
        }
jello chen | 园豆:7091 (大侠五级) | 2015-11-09 11:53

@jello chen: 思路不错,谢谢。

Cboii | 园豆:137 (初学一级) | 2015-11-10 17:41

@jello chen: 准备试下

Cboii | 园豆:137 (初学一级) | 2015-11-10 17:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册