(Należy pamiętać, że ta odpowiedź dotyczy interfejsu API sieci Web ASP.NET, który odpowiada tagowi użytemu w pytaniu. Zobacz to pytanie, jeśli Twoje zapytanie dotyczy ASP.NET MVC.)
Pytanie nie określa sposobu hostowania usługi ASP.NET Web API . Okno dialogowe w tym poście wskazuje (wyróżnienie moje):
kichalla napisał 24 października 2014 o 1:35
Jeśli NIE korzystasz z własnego hostingu, nie używaj
pakietu Microsoft.AspNet.WebApi.Owin z usługami IIS ... ten pakiet powinien być używany tylko do samodzielnego hostingu .
Microsoft.AspNet.WebApi.Owin
W zaakceptowanej odpowiedzi zaleca się użycie pakietu . W tej odpowiedzi zgłaszam, co zadziałało podczas hostowania usługi ASP.NET Web API w IIS .
Najpierw zainstaluj następujący pakiet NuGet:
Microsoft.Owin.Host.SystemWeb
Serwer OWIN, który umożliwia uruchamianie aplikacji opartych na OWIN w usługach IIS przy użyciu potoku żądań ASP.NET.
(Pamiętaj, że w trakcie pisania najnowszą dostępną wersją tego pakietu NuGet jest 3.1.0 . Ponadto, w zakresie, w jakim może to mieć znaczenie, używam Visual Studio 2013 Update 5).
Po zainstalowaniu tego pakietu NuGet możesz wykonać następujące czynności:
using Microsoft.Owin;
using System.Web;
IOwinContext context = HttpContext.Current.GetOwinContext();
// or
IOwinContext context = HttpContext.Current.Request.GetOwinContext();
Teraz, aby rzucić trochę światła na to, jak rozwiązuje się te stwierdzenia. W programie Visual Studio, jeśli klikniesz prawym przyciskiem myszy GetOwinContext
dowolną instrukcję i wybierzesz „Peek Definition”, program Visual Studio wyświetli następujące informacje:
// Assembly Microsoft.Owin.Host.SystemWeb.dll, v3.1.0.0
using Microsoft.Owin;
using System;
using System.Runtime.CompilerServices;
namespace System.Web
{
public static class HttpContextExtensions
{
public static IOwinContext GetOwinContext(this HttpContext context);
public static IOwinContext GetOwinContext(this HttpRequest request);
}
}
Jak widać, w System.Web
przestrzeni nazw istnieją dwie GetOwinContext
metody rozszerzające:
- Jeden w
HttpContext
klasie i
- Drugi w
HttpRequest
klasie.
Ponownie, dla tych, którzy hostują swoją usługę interfejsu API sieci Web w usługach IIS, mam nadzieję, że wyjaśni to wszelkie niejasności dotyczące tego, gdzie GetOwinContext
można znaleźć definicję w odniesieniu do późnej daty w 2017 r.
System.Web.Http
przestrzeni nazw, ale pochodzi zSystem.Web.Http.Owin
biblioteki dll. Czy wspomniałeś o tym?