He estado buscando durante una hora tratando de averiguar por qué esto no funciona.
Tengo una aplicación ASP.Net MVC 5 con WebAPI. Estoy tratando de obtener Request.GetOwinContext (). Authentication, sin embargo, parece que no puedo encontrar cómo incluir GetOwinContext. Aquí está mi código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using TaskPro.Models;
namespace TaskPro.Controllers.api
{
public class AccountController : ApiController
{
[HttpPost]
[AllowAnonymous]
public ReturnStatus Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var ctx = Request.GetOwinContext(); // <-- Can't find this
return ReturnStatus.ReturnStatusSuccess();
}
return base.ReturnStatusErrorsFromModelState(ModelState);
}
}
}
Por lo que he leído, debería ser parte de System.Net.Http, pero lo he incluido y todavía no se resuelve. Ctrl-Space tampoco me da ninguna opción de intellisense.
¿Que me estoy perdiendo aqui?
c#
asp.net-web-api
owin
Escocés
fuente
fuente
System.Web.Http
espacio de nombres, pero es delSystem.Web.Http.Owin
dll. ¿Ha hecho referencia a eso?System.Net.Http
espacio de nombres. Así que no necesitas un uso para.Owin
, solousing System.Net.Http
que ya tienes.Respuestas:
El
GetOwinContext
método de extensión está en laSystem.Web.Http.Owin
dll que debe descargarse como un paquete nuget (el nombre del paquete nuget es Microsoft.AspNet.WebApi.Owin)Consulte msdn aquí: http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowincontext(v=vs.118).aspx
Paquete Nuget aquí: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin
Sin embargo, el método sigue siendo parte del
System.Net.Http
espacio de nombres, por lo que lasusing
definiciones que tiene deberían estar bien.EDITAR
De acuerdo, para aclarar algo de confusión: si está utilizando un ApiController (es decir
MyController : ApiController
), necesitará elMicrosoft.AspNet.WebApi.Owin
paquete.Si está utilizando un controlador Mvc normal (es decir
MyController : Controller
), necesitará elMicrosoft.Owin.Host.SystemWeb
paquete.En MVC 5, las canalizaciones para Api y MVC regular eran muy diferentes, pero a menudo tienen las mismas convenciones de nomenclatura. Entonces, un método de extensión en uno no se aplica al otro. Lo mismo ocurre con muchos de los filtros de acción, etc.
fuente
Microsoft.Owin.Host.SystemWeb
, noMicrosoft.AspNet.WebApi.Owin
.Microsoft.AspNet.WebApi.Owin
. Si está en un controlador MVC regular, necesitaráMicrosoft.Owin.Host.SystemWeb
. ElRequest
objeto es diferente según el tipo de controlador que esté utilizando, por lo que es un método de extensión diferente.Ninguno de estos funcionó para mí. Tuve que comparar los paquetes de Nuget con uno que se creó con Identity y encontré que faltaba este paquete de Nuget que, cuando se agregó, solucionó el problema para mí.
Aparentemente, lo necesita para ejecutar OWIN en IIS utilizando la canalización de solicitudes ASP.NET (¡lea que está jodido sin él!)
fuente
En WEB API, puede obtener la referencia utilizando lo siguiente:
funciona en Identity 2.0
fuente
Es posible que deba agregar el paquete NuGet
Microsoft.Owin.Host.SystemWeb
para hacer esto:fuente
En mi caso necesito agregar
para resolver GetOwinContext y luego GetUserManager en la siguiente línea.
fuente
Tengo este problema y descargo un paquete adicional de nuget para resolver mi problema (ejecute el siguiente comando en la consola del Administrador de paquetes) Install-Package Microsoft.Owin.Host.SystemWeb
fuente
Esto me tomó una eternidad para encontrar una respuesta simple: pero lo que hice fue usar la extensión Get de la única instancia de IOwinContext que fue instanciada en el inicio. Entonces salió así:
fuente
El
GetOwinContext()
método de extensión no se encuentra en subprocesos que no sean el subproceso de la GUI.Así que tenga cuidado de no llamar a esta función desde ninguna
await
función ed.fuente
Después de mirar el proyecto predeterminado de ASP.NET, descubrí que necesitaba incluir esto en el inicio de mi aplicación:
fuente
Me faltaba el paquete: Microsoft.AspNet.WebApi.Owin para ApiControllers. ¡Espero que esto ayude!
fuente
Tuve este mismo problema y lo resolví usando un método privado:
private IAuthenticationManager AuthenticationManager { get { return HttpContext.Current.GetOwinContext().Authentication; } }
Esto funcionó a la perfección para mí.
fuente
(Tenga en cuenta que esta respuesta es para ASP.NET Web API que corresponde a la etiqueta utilizada en la pregunta. Consulte esta pregunta si su consulta es con respecto a ASP.NET MVC).
La pregunta no especifica cómo el servicio API de ASP.NET Web debe ser acogido . El diálogo en esta publicación indica (el énfasis es mío):
Se
Microsoft.AspNet.WebApi.Owin
recomienda el uso del paquete en la respuesta aceptada . En esta respuesta, estoy informando lo que me ha funcionado al alojar un servicio de API web ASP.NET en IIS .Primero, instale el siguiente paquete NuGet:
(Tenga en cuenta que mientras escribo, la última versión disponible de este paquete NuGet es 3.1.0 . Además, en la medida en que pueda importar, estoy usando Visual Studio 2013 Update 5.)
Después de instalar este paquete NuGet, puede hacer lo siguiente:
Ahora, para arrojar algo de luz sobre cómo se resuelven estas afirmaciones. En Visual Studio, si hace clic con el botón derecho
GetOwinContext
en cualquiera de las declaraciones y selecciona "Peek Definition", Visual Studio mostrará lo siguiente:Como puede ver, dentro del
System.Web
espacio de nombres, hay dosGetOwinContext
métodos de extensión:HttpContext
clase, yHttpRequest
clase.Nuevamente, para aquellos que alojan su servicio Web API en IIS, espero que esto aclare cualquier ambigüedad con respecto a dónde
GetOwinContext
se puede encontrar una definición con respecto a esta fecha tardía en 2017.fuente
Tuve que agregar paquete
Microsoft.AspNet.Identity.Owin
fuente