Нет диспетчера аутентификации OWIN, связанного с запросом
После попытки включить owin и идентификатор AspNet в мой проект Web Api (в VS 2013 +.Net 4.5.1) я получаю следующую ошибку в каждом правильном или unvalid (запросе на отсутствие контроллера):
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
No OWIN authentication manager is associated with the request.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request) at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>
Как я проверял в режиме отладки, исключение тоже не обрабатывается! Также я понял, что класс Configuration
в Startup
никогда не вызывается (он никогда не попадает в отладчик). вот код для запуска:
[assembly: OwinStartup(typeof(bloob.bloob.Startup))]
namespace bloob.bloob
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
Ответы
Ответ 1
Наконец-то я нашел проблему! После сравнения строк за строкой с недавно созданным проектом и не обнаружив разницы, я проверил ссылки на оба проекта и да!... Вся проблема была в недостающем пакете:
Microsoft.Owin.Host.SystemWeb
Я не знаю, почему этот упакованный пропущен на этапе установки пакета, но странная причина в том, почему не возникло какое-либо исключение сборки? или никакой ошибки ссылки dll?
Ответ 2
Я изначально создал проект с аутентификацией. Мне пришлось удалить это в файле WebApiConfig.cs.
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
Если вы намереваетесь включить аутентификацию, убедитесь, что она настроена в WebApiConfig.cs
Ответ 3
В моем случае это не удалось с помощью этих настроек в web.config. Надеюсь, это поможет кому-то избежать этого.
<appSettings>
<add key="owin:AutomaticAppStartup" value="false" />
</appSettings>
Ответ 4
если вам действительно не нужен OWIN, вы можете просто удалить его.
один способ сделать это - в Nuget Manager удалить каждую библиотеку OWIN, порядок будет определяться их зависимостями.
После этого вам не нужен код или конфиг OWIN. это сработало лучше для меня, так как я использую windows auth.
Ответ 5
У меня была та же проблема. Пакет не отображался в диспетчере пакетов NuGet.
Я добавил ссылку в packages.config:
<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />
И ссылка в файле проекта (xxx.csproj):
<Reference Include="Microsoft.Owin.Host.SystemWeb">
<HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
</Reference>
Ответ 6
Изменение ключа owin:AutomaticAppStartup
на true
в Web.config исправлено для меня, т.е. измените его:
<appSettings>
<add key="owin:AutomaticAppStartup" value="false" />
</appSettings>
:
<appSettings>
<add key="owin:AutomaticAppStartup" value="true" />
</appSettings>