В контексте не найден элемент owin.Environment

Microsoft недавно представлен новый идентификатор ASP.NET — замена старого (простого) членства. К сожалению, я не могу использовать эту новую систему членства в своем старом проекте, потому что она генерирует исключение System.InvalidOperationException: в контексте не найден элемент owin.Environment. Это известная ошибка, но Microsoft хранит молчание по этому поводу. Самый простой способ воспроизвести эту ошибку — это создать новое веб-приложение (MVC, WebForms или WebApi — не имеет значения) в VS 2013 (с Web Tools 2013 Preview Refresh), а затем перейти на страницу входа. Это сработает. Затем измените пространство имен в своем приложении на любое другое, кроме исходного пространства имен, и страница входа выдаст эту ошибку. Изменение пространства имен обратно на исходное (то, которое вы использовали при создании проекта) решит эту проблему.

Похоже, .net хранит где-то что-то, относящееся к исходному пространству имен, но что и где найти не могу, в папке проекта этого нет. Я знаю, что stackoverflow — не место для сообщений об ошибках, я просто надеюсь, что кто-то уже нашел решение этой проблемы или, возможно, люди, участвующие в разработке ASP.NET Identity, увидят это.


person graycrow    schedule 14.08.2013    source источник
comment
Для меня это исправило это для меня - никаких кредитов мне.   -  person Meikel    schedule 13.03.2018
comment
Обратите внимание, что OwinContext недоступен из Global.asax См. также stackoverflow.com/q/24660380/18192   -  person Brian    schedule 09.01.2019


Ответы (13)


Скорее всего, он не может найти класс запуска OWIN. Соглашение по умолчанию для класса Startup — [AssemblyName].Startup. Если вы больше не следуете этому соглашению, вам нужно будет указать полное имя вашего класса Startup в файле Web.Config.

Следующий выпуск пакета Microsoft.Owin.Host.SystemWeb теперь выдает подробные сообщения об исключениях, когда не удается найти класс Startup.

person pranav rastogi    schedule 16.08.2013
comment
Добавление ‹appSettings›‹add key=owin:AppStartup value=[Namespace].Startup, [AssemblyName] /›‹/appSettings› в web.config устранило эту проблему. Благодарю вас! - person graycrow; 19.08.2013
comment
@pranavrastogi Проголосовал против из-за отсутствия информации! - person ; 31.03.2020
comment
@graycrow На этот комментарий должен быть ответ! Большое спасибо. - person ; 31.03.2020

У меня была точно такая же ошибка, но, как оказалось, у меня была другая проблема с конфигурацией в моем файле web.config. В моем web.config отсутствовал атрибут defaultLanguage="c#" в элементе компиляции в system.web.

В этом случае по умолчанию будет использоваться VB. Поэтому, если ваш класс Startup не написан на VB, вам следует изменить язык по умолчанию на C#.

Не верно:

<compilation debug="true" optimizeCompilations="true" targetFramework="4.6.1">

Это правильно (если вы не используете VB):

<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.6.1">
person Drol    schedule 07.03.2016
comment
Спасибо. Это исправило это для меня с проектом EPiServer Alloy. - person Ken Palmer; 01.02.2018
comment
Тег должен быть рядом. Спасибо! - person Sterling Diaz; 12.07.2018
comment
Как, черт возьми, ты это понял? - person r3mark; 16.04.2019
comment
Сначала мы попробовали все остальное, и двое из нас сказали: «Это решение никак не решит проблему», и оно помогло. Я с r3mark, как ты это понял? - person madamission; 13.10.2020

У меня была такая же проблема, она была исправлена ​​после того, как я убедился, что эта строка находится в web.config:

<add key="owin:AutomaticAppStartup" value="true" />
person cesar-moya    schedule 19.07.2015

Я создал два новых проекта с именами TesteMvc5.2 и TesteMvc5.0, и оба они не работали при запуске.

это связано с тем, что пространство имен по умолчанию отличается от имени сборки. но после того, как я поставил строку

<add key="owin:AppStartup" value="TesteMvc5._2.Startup, TesteMvc5.2" />

в web.config все работало нормально.

person Luiz Bicalho    schedule 20.08.2013

Очистка временных файлов ASP.NET помогла мне решить именно эту проблему.

person Gatis Bergšpics    schedule 30.10.2015
comment
У меня сработало удаление содержимого этой конкретной папки: c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files - person Vito; 19.05.2020
comment
Я также видел эту проблему на одной из наших машин разработки, и в то время это, казалось, исправило ее. Должно быть много причин, по которым возникает эта ошибка, отсюда и множество решений. - person madamission; 13.10.2020

Я пробовал все, что упомянуто на этой странице, но ничего не получилось. Затем я узнал о настройке в IIS с именем owin:AutomaticAppStartup. Его можно найти на странице «Параметры приложения» диспетчера IIS для веб-сайта по умолчанию. Проверьте, соответствует ли этот параметр истине. Если не установлено значение true. Это сработало для меня.

Это веб-сайт, на котором я нашел ответ: http://gotoanswer.stanford.edu/?q=Microsoft.Owin.Host.SystemWeb+and+still+getting+No+owin.Environment+item+был+найден+в+контексте

person Ron Dow    schedule 09.03.2015
comment
Таким образом, на самом деле есть два шага: 1 добавить ‹add key=owin:AppStartup value=TesteMvc5._2.Startup, TesteMvc5.2 /›, предложенный Луисом, и 2. ‹add key=owin:AutomaticAppStartup value=true/› - person Arvind Singh; 26.03.2015
comment
Арвинд, не могли бы вы опубликовать больше вашего web.config, чтобы показать, как это работает? Спасибо! - person curious1; 20.04.2015
comment
@ Рон, эта ссылка не работает - person KevinDeus; 01.09.2016
comment
@ArvindSingh - ваше решение работает отлично. У нас есть вспомогательное приложение, размещенное как часть основного веб-сайта, и хотя нам приходилось выполнять обычное inheritinchildapplications = false, дочернее приложение выдавало ошибку (не всегда) с этой ошибкой. Например, оно работало в 50% случаев и в 50% случаев. % времени он жаловался на OWIN. Это приложение было нетронутым около 3 лет. Хотя он отлично работал локально на сервере с другими решениями, он не будет работать, когда вы обращаетесь к нему с доменного имени, поэтому эти два утверждения идеально сочетаются друг с другом. - person Preetham; 19.04.2020

У меня была такая же проблема. Я исправил это с помощью web.config.

Однако я изменил имя сборки и пространство имен и больше нигде не нашел исходное имя сборки.

Затем я обнаружил, что clean не удаляет исходную сборку из корзины.

После удаления мусорной корзины я смог удалить запись OWIN web.config.

person user2697956    schedule 02.11.2013
comment
очистка каталогов bin и obj также помогла мне (в сочетании с изменением web.config). - person markwilde; 07.01.2014

Если вы скопировали приведенную ниже конфигурацию из MVC4, вам следует удалить ее из web.config.

<add key="owin:AutomaticAppStartup" value="false" />
person Mathi Rajan    schedule 05.01.2015
comment
Это исправило это для меня. - person Whelkaholism; 19.12.2016

Ни один из приведенных выше ответов не помог мне.

Оказалось, что в моем проекте отсутствует класс «Автозагрузка», который содержит следующее:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(NAMESPACE.Startup))]
namespace NAMESPACE
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

Этот файл с именем «Startup.cs» находится в корневой папке (~/) вашего проекта.

В моем «Web.config» нет ни одной из этих конфигураций «Owin», опубликованных в других ответах.

person Daniel    schedule 10.07.2018
comment
Нет необходимости добавлять Configure (приложение) внутрь конфигурации. Без этого работает. - person anil shrestha; 10.03.2020

Была такая же проблема. Спасибо за общие решения. это..

<add key="owin.AppStartup" value="Namespace.Startup, Namespace"/>
<add key="owin:AutomaticAppStartup" value="false"/>  

исправлено для меня

person Zia UsafXai    schedule 25.05.2018
comment
‹add key=owin.AppStartup value=[Namespace].Startup, [Namespace]/› ‹add key=owin:AutomaticAppStartup value=false/› - person Sterling Diaz; 12.07.2018
comment
Обратите внимание, что вы должны изменить пространство имен на свое собственное пространство имен, а второе [пространство имен] - на имя вашей сборки. - person Sterling Diaz; 12.07.2018

Я понятия не имею, почему это работает, но это сработало!

Моя проблема была в VS2013. В WebConfig для отладки было установлено значение true, и я получил эту ошибку. Когда я установил для него значение false, он работал нормально, а затем я сбросил значение true, и он продолжал работать нормально!

Сначала, когда отладка была истинной, прежде чем измениться на ложную, я поставил точку останова в своем коде запуска, и она вообще не была достигнута. После изменения на false, нажав save, а затем обратно на true, был вызван код StartUp, и программа работает как надо.

person Dov Miller    schedule 02.07.2018

Я столкнулся с этой ошибкой в ​​решении Optimizely (Episerver), где у меня было две ветви функций, использующие одну и ту же базу данных CMS. В одной функциональной ветке я работал над доказательством концепции с использованием критерия посетителя. Итак, я создал что-то вроде этого:

    public class SomeVisitorCriterionSettings : CriterionModelBase
    {
        public override ICriterionModel Copy()
        {
            return base.ShallowCopy();
        }
    }



[VisitorGroupCriterion(
    Category = "Some category",
    DisplayName = "My visitor criterion")]
public class SomeVisitorCriterion : CriterionBase<SomeVisitorCriterionSettings>
{
    public override bool IsMatch(IPrincipal principal, HttpContextBase httpContext)
    {
        // match logic here..
    }
}

И в Episerver -> CMS -> Группы посетителей я создал экземпляр этого критерия посетителя. После переключения на другую ветку, где этого кода не было, но был экземпляр в базе данных, выбрасывалось исключение Owin.

Удаление критерия посетителя в CMS решило проблему, но я, честно говоря, понятия не имею, почему возникает такое исключение. хотя хотелось бы узнать..

person Frostrar    schedule 21.07.2021

добавление языка по умолчанию для компиляции в web.config помогло мне!

person David    schedule 02.03.2017
comment
Добро пожаловать в Stack Overflow. Вы должны добавить описание к своему ответу. Одного предложения обычно недостаточно. - person filipst; 02.03.2017
comment
‹compilation debug=true defaultLanguage=c# targetFramework=4.5.2 optimCompilations=true/› важно, чтобы defaultLanguage был установлен на C# - person David; 09.03.2017
comment
так это точно так же, как этот ответ, созданный за год до вашего? stackoverflow.com/a/35849641/2170171 - person Lanorkin; 16.08.2017