web.api委托处理程序在执行innerhandler时给出404

时间:2014-07-03 08:05:57

标签: c# asp.net-web-api-routing

我正在为iOS应用创建web.api(c#中的v1)。 该应用程序正在以1次爆发向应用程序发送gps-date。所以我们想在应用程序中gzip数据,然后处理这些数据。

我创建了一个DelegatingHandler

public class GZipToJsonHandler : DelegatingHandler
{
    public GZipToJsonHandler(HttpMessageHandler innerHandler)
    {
        InnerHandler = innerHandler;
    }
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
            /* removed unzip code */
            /* removed log call */
            return base.SendAsync(request, cancellationToken);
    }
}

并添加了自定义路线

var handler = new HttpControllerDispatcher(config);
config.Routes.MapHttpRoute(
  "WithGZip",
  "client/GPSDataWithGZip",
  null,
  null, new GZipToJsonHandler(handler)
);

当应用程序调用路由时,我可以在日志文件中看到处理程序被调用。 但当它命中base.async时,它返回&#34;找不到与所请求的URI匹配的HTTP资源&#34;

我添加了大量日志记录,但我似乎无法找到为什么它找不到已经发布的资源

客户端控制器中的

我有这个动作

public HttpResponseMessage GPSDataWithGZip([FromBody] GpsRequest model)
{
    return SaveGPSData(model);
}

1 个答案:

答案 0 :(得分:0)

看起来InnerHandler无法将当前网址与路线匹配。 将默认值添加到它工作的路线后。

defaults: new {controller='client', action='GPSDataWithGZip'}