对于我正在进行的当前项目,我们需要实现一个web api。它需要存在于现有的webforms项目中。规范说我们需要使用Owin。
所以在使用以下方法连接所有内容后:Microsoft.Owin,Microsoft.Owin.Host.SystemWeb,Microsoft.Owin.Hosting,Microsoft.Owin.Security
使用OwinStartupAttribute的正确启动类。 app.UseWebApi与windsor IOC容器。 Web api似乎按预期工作。
除了向现有网站提出的所有请求都通过webapi这一事实外。
更多解释。 我们需要一个LanguageMessageHandler: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);
}
所以现在我们试图弄清楚为什么所有请求都由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();
}
}
答案 0 :(得分:0)
通过使用过滤器而不是消息处理程序来修复。 错误地认为消息处理程序将在管道中路由后执行。