對於我正在開發的這個當前項目,我們需要實現一個web api。它需要住在現有的webforms項目中。規格說我們需要使用Owin。Owin Web Api在現有項目中,停止捕獲所有請求
因此,使用接線就緒後:Microsoft.Owin,Microsoft.Owin.Host.SystemWeb,Microsoft.Owin.Hosting,Microsoft.Owin.Security
與OwinStartupAttribute一個適當的啓動類。 帶Windsor IOC容器的app.UseWebApi。 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();
}
}