首页 新闻 会员 周边 捐助

以Self Host 方式寄宿Web API 404的处理

0
悬赏园豆:10 [已解决问题] 解决于 2016-01-28 12:13

以Self Host 方式寄宿Web API , 如果访问不存在的URL时会返回一下错误,

现在我想自己处理这个错误 ,不用自动输出的信息。 请问该怎么处理?  非常感谢

寧愿為你 的主页 寧愿為你 | 初学一级 | 园豆:69
提问于:2016-01-28 09:03
< >
分享
最佳答案
0

之前回答过,http://q.cnblogs.com/q/77190/

收获园豆:10
jello chen | 大侠五级 |园豆:7336 | 2016-01-28 10:14

选择了controller之后,框架会通过调用IHttpActionSelector.SelectAction方法来选择动作。这个方法就需要有controller要存在了。 controller就不存在怎么办呢?

寧愿為你 | 园豆:69 (初学一级) | 2016-01-28 10:59

@寧愿為你: 那就再自定义一个DefaultHttpControllerSelector,像下面这样:

public class NotFoundHttpControllerSelector : DefaultHttpControllerSelector
    {
        public override HttpControllerDescriptor SelectController(System.Net.Http.HttpRequestMessage request)
        {
            HttpControllerDescriptor descriptor = null;
            try
            {
                descriptor = base.SelectController(request);
            }
            catch (HttpResponseException ex)
            {
                var statusCode = ex.Response.StatusCode;
                if (statusCode != HttpStatusCode.NotFound && statusCode != HttpStatusCode.MethodNotAllowed) throw;
                //这里可以转到错误处理的Action
            }
            return descriptor;
        }
    }
    
    //在Global中Replace默认的Service
    GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new NotFoundHttpControllerSelector());

或者,写成一个

jello chen | 园豆:7336 (大侠五级) | 2016-01-28 11:36
其他回答(2)
0

全局异常处理应该能接到404异常试试.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-01-28 09:42
0

谢谢,jello chen 。

Controller可以通过DefaultHttpControllerSelector来实现,谢谢。

寧愿為你 | 园豆:69 (初学一级) | 2016-01-28 12:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册