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

本文关键字:请求 API Web 项目 Owin | 更新日期: 2023-09-27 18:34:12

对于我正在从事的当前项目,我们需要实现一个 web api。它需要位于现有的网络表单项目中。规范说我们需要使用 Owin。

因此,在连接所有内容后:Microsoft.Owin,Microsoft.Owin.Host.SystemWeb,Microsoft.Owin.Hosting,Microsoft.Owin.Security

具有 OwinStartupAttribute 的正确启动类。.app。使用带有温莎IOC容器的WebApi。Web API 似乎按预期工作。

除了对现有网站的所有请求也通过webapi的事实。

多解释一下。我们需要一个 LanguageMessageHandler:DemissionatingHandler。设置该类后,我们开始注意到,即使我们没有请求任何与webApi相关的内容,"SendAsync"上的断点也会被捕获。

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

一个位代码澄清:

启动类:

[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);
    }

所以现在我们试图弄清楚为什么所有请求都由 LanguageMessageHandler 处理,而不仅仅是为 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();
    }
}

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

通过使用筛选器而不是消息处理程序进行修复。错误地假设消息处理程序将在管道中路由后执行。