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();
}
}
通过使用筛选器而不是消息处理程序进行修复。错误地假设消息处理程序将在管道中路由后执行。