Asp.Net WebApi 集成OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联” 的解决办法

在Asp.Net WebApi 项目中开启OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常:

出现错误。
没有 OWIN 身份验证管理器与此请求相关联。
ExceptionType:System.InvalidOperationException
StackTrace:   在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request)
在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()

如果是英文版的VisualStudio,以上异常信息会是:No OWIN authentication manager is associated with the request

原因是因为我们在Asp.Net WebApi项目使用了OWIN框架,但是没有指定OWIN框架使用的认证方式,而WebApi又默认启用了身份认证,所以WebApi无法认证到来的Http请求,抛出异常。

我们可以看到下面的OWIN框架Startup类的Configuration方法为空,没有为OWIN制定身份认证方式。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Owin;

[assembly: OwinStartup(typeof(Daimler.CdnMgmt.Web.Startup))]

namespace Daimler.CdnMgmt.Web
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {

        }
    }
}

解决方法有两个:

第一:在OWIN的Startup类中指定默认的认证方式。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Owin;

[assembly: OwinStartup(typeof(Daimler.CdnMgmt.Web.Startup))]

namespace Daimler.CdnMgmt.Web
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
        }
    }
}
时间: 2024-10-29 10:46:49

Asp.Net WebApi 集成OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联” 的解决办法的相关文章

Asp.Net WebAPI添加OData功能后,支持查询,排序,过滤。

给Asp.Net WebAPI添加OData功能后,就能支持在url中直接输入排序,过滤条件了. 一.修改WebAPIConfig.cs: using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Net.Http.Formatting; using System.Net.Configuration; namespace ProjectManagem

Virtual:VirtualBox 安装Centos7后 安装增强功能出现kernel headers not found for target kernel 错误的解决办法

VirtualBox 安装Centos7后 安装增强功能出现kernel headers not found for target kernel 错误的解决办法 提示:kernel headers not found for target kernel 原因已经表明出来了,说明kernel headers 没有安装; 直接贴出解决方案: 1.update kernel yum update kernel -y 2.Install the kernel-headers, kernel-devel 

Asp.net WebApi + EF 单元测试架构 DbContext一站到底

其实关于webapi和Ef service的单元测试我以前已经写过相关文章,大家可以参考: Asp.net WebAPI 单元测试 单元测试 mock EF 中DbContext 和DbSet Include 先看一下项目结构图: 这个demo非常简单,UTWebApi.Data 是纯粹的数据定义,UTWebApi.Service是我们的业务服务逻辑层,UTWebApi 是我们webapi的实现,UTWebApi.Tests就是测试项目. 数据层: BloggerDbContext的构造函数一般

ASP.NET Core on K8S深入学习(10)K8S包管理器Helm

本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Helm 1.1 为何需要Helm? 虽然K8S能够很好地组织和编排容器,但是缺少一个更高层次的应用打包工具,而Helm就是专门干这个事的. 通过Helm能够帮助开发者定义.安装和升级Kubernetes中的容器云应用.同时,也可以通过Helm进行容器云应用的分享. 1.2 Helm的架构 Helm的整体架构如下图(图片来源-Kubernetes中文社区)所示: Helm架构由

asp.net 如何配置authentication,完成基于表单的身份验证

步骤一: 在根目录下的web.config中加入: <system.web> <authentication mode="Forms">             <forms loginUrl="Login.aspx" defaultUrl="admin/admin.aspx" name=".ASPXFORMSAUTH" timeout="20">           

将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法

出现bad interpreter:No such file or directory的原因,是文件格式的问题.这个文件是在Windows下编写的.换行的方式与Unix不一样,但是在vim下面如果不Set一下又完全看不出来. 问题分析:1.将windows 下编写好的SHELL文件,传到linux下执行,提示出错.2.出错信息:bad interpreter: 没有那个文件或目录. 问题原因:因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符.脚本文件是DOS格式

安装完SQL Server 2012后,由Windows身份验证设置为混合型的身份验证

如何解决SQL2012windows身份验证模式改为混合验证模式... 由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法: 1.选择"使用 Windows 身份验证"连接上 SQL Server: 2. 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称(就是下图蓝色部分),右击,选择"属性". 3.再选

将最小的OWIN身份验证添加到现有的ASP.NET MVC应用程序

https://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Existing-ASPNET-MVC-Application 将最小的OWIN身份验证添加到现有的ASP.NET MVC应用程序 2015年4月29日•来自毛伊岛,HI•    40条评论 从ASP.NET 4开始,ASP.NET提供了一个相当有用的身份系统.如果您创建一个新项目并选择一个MVC项目并选

Asp.Net_Web身份验证

百度一下”asp.net身份认证“,你会得到很多相关的资料,这些资料通常上来就会介绍诸如”Form认证“”Windows认证“等内容,而没有给出一个完整的流程.初学者对此往往一头雾水,我也曾经被坑过很多回,于是写下此文,算是复习. 现代的Windows Server系统都是基于严格的用户机制的,当你想操作服务器时肯定需要账号密码验证的.当我们把开发好的Web应用程序部署在服务器后,用户通过浏览器访问该站点,实际上就是该用户通过HTTP操作这台服务器的过程,本质上也是用户操作服务器(至少是读)的过