Owin Web Api在现有项目中,停止捕获所有请求

时间:2016-02-10 14:28:59

标签: c# asp.net-web-api owin mixing

对于我正在进行的当前项目,我们需要实现一个web api。它需要存在于现有的webforms项目中。规范说我们需要使用Owin。

所以在使用以下方法连接所有内容后:Microsoft.Owin,Microsoft.Owin.Host.SystemWeb,Microsoft.Owin.Hosting,Microsoft.Owin.Security

使用OwinStartupAttribute的正确启动类。 app.UseWebApi与windsor IOC容器。 Web api似乎按预期工作。

除了向现有网站提出的所有请求都通过webapi这一事实外。

更多解释。 我们需要一个LanguageMes​​sageHandler:DelegatingHandler。设置完该课程后,即使我们没有请求任何与webApi相关的内容,我们也开始注意到' SendAsync上的断点被捕获。

旧网站甚至不应该了解这个处理程序。

澄清的位代码:

startupclass:

[assembly: OwinStartupAttribute(typeof(Startup))]
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var container = ((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container;


        app.UseWebApi(container);


    }
}

UseWebApi扩展名:

    public static void UseWebApi(this IAppBuilder app, IWindsorContainer container)
    {
        var config = new HttpConfiguration
        {
            DependencyResolver = new WindsorDependencyResolver(container)
        };

        //Web API Routes
        config.MapHttpAttributeRoutes();


        //Default to json when requested by browser
        config.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));

        //Add language handler
        config.MessageHandlers.Add(new LanguageMessageHandler());


        //Ensure initialized
        config.EnsureInitialized();

        //Start WebApi
        app.UseWebApi(config);
    }

所以现在我们试图弄清楚为什么所有请求都由LanguageMes​​sageHandler处理,而不仅仅是为webApi处理的请求。

示例路线:

[RoutePrefix("api/dossier")]
public class AdministrationsController : ApiController
{
    //GET
    [Route("{idtype}_{id}/administrations/planned/")] //?limit={maxdate}&nursingunit={nuid}
    [HttpGet]
    public IHttpActionResult Planned(string idtype, int id, [FromUri] int maxdate = 6, [FromUri] int? nuid = null)
    {
        return Ok();
    }
}

1 个答案:

答案 0 :(得分:0)

通过使用过滤器而不是消息处理程序来修复。 错误地认为消息处理程序将在管道中路由后执行。