Sco*_*tie 93 c# asp.net-web-api owin
我一直在寻找一个小时试图弄清楚为什么这不起作用.
我有一个带有WebAPI的ASP.Net MVC 5应用程序.我正在尝试获取Request.GetOwinContext().身份验证,但我似乎无法找到如何包含GetOwinContext.这是我的代码:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
从我读过的内容来看,它应该是System.Net.Http的一部分,但我已经包含了它,但它仍然没有解决.Ctrl-Space也没有给我任何intellisense选项.
我在这里错过了什么?
Sim*_*n C 153
的GetOwinContext延伸方法是在System.Web.Http.Owin其中DLL 需要被下载为NuGet包(所述NuGet包名称是Microsoft.AspNet.WebApi.Owin)
Install-Package Microsoft.AspNet.WebApi.Owin
Run Code Online (Sandbox Code Playgroud)
请在此处查看msdn:http://msdn.microsoft.com/en-us/library/system.net.http.owinhttprequestmessageextensions.getowincontext( v=vs.118) .aspx
Nuget包在这里:https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin
但是,该方法仍然是System.Net.Http命名空间的一部分,因此using您的定义应该没问题.
编辑
好的,为了消除一些困惑:如果你使用ApiController(即MyController : ApiController),你将需要Microsoft.AspNet.WebApi.Owin包.
如果您使用常规Mvc控制器(即MyController : Controller),则需要该Microsoft.Owin.Host.SystemWeb包.
在MVC 5中,Api和常规MVC的管道非常不同,但通常具有相同的命名约定.因此,一个扩展方法不适用于另一个.对于许多动作过滤器等也是如此
Obi*_*Obi 47
这些都不适合我.我不得不将Nuget软件包与使用Identity创建的软件包进行比较,我发现这个Nuget软件包丢失,添加时修复了我的问题
Microsoft.Owin.Host.SystemWeb
Run Code Online (Sandbox Code Playgroud)
显然你需要它使用ASP.NET请求管道在IIS上运行OWIN(如果没有它,请阅读你!)
小智 44
在WEB API中,您可以使用以下内容获取引用:
HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
Run Code Online (Sandbox Code Playgroud)
它适用于Identity 2.0
Ser*_*gan 21
您可能需要添加NuGet包Microsoft.Owin.Host.SystemWeb才能执行此操作:
HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我需要添加
using Microsoft.AspNet.Identity.Owin;
Run Code Online (Sandbox Code Playgroud)
用于解析GetOwinContext,然后在以下行中解析GetUserManager.
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
Run Code Online (Sandbox Code Playgroud)
我有这个问题,我从nuget下载了额外的软件包来解决我的问题,(在Package Manager Console中运行以下命令) Install-Package Microsoft.Owin.Host.SystemWeb
| 归档时间: |
|
| 查看次数: |
79881 次 |
| 最近记录: |