Я создал небольшое веб-приложение ASP.NET в Visual Studio 2019, начиная с шаблона проекта веб-приложения ASP.NET MVC для VB, в котором для аутентификации используются индивидуальные учетные записи пользователей по умолчанию.Я близок к завершению разработки, и где-то по пути я потерял возможность войти в свое приложение, когда я запускаю его без отладчика, подключенного через CTRL-F5: Запуск без отладки.Запуск приложения с отладчиком, подключенным через F5: Начать отладку и любой другой метод запуска, который подключает отладчик, позволяет приложению вести себя так, как ожидается.
При запуске веб-приложение просит пользователя войти в систему. После успешного входа в систему ожидаемое поведение - это перенаправление на домашнюю страницу, но в настоящее время при успешном входе в систему снова отображается только страница входа, и я считаю,приложение не распознает пользователя как аутентифицированного.
Я начал отладку со старой чистой, перекомпилировать и перестроить, и мне там не повезло.Добавил оператор throw в оператор успеха метода login и проверил, что попытка входа в систему прошла успешно.Метод входа в систему с этим оператором throw (расположенный в AccountController.vb
) показан ниже.Попытка входа в систему вызывает случай SignIn.Success
.
' POST: /Account/Login
<HttpPost>
<AllowAnonymous>
<ValidateAntiForgeryToken>
Public Async Function Login(model As LoginViewModel, returnUrl As String) As Task(Of ActionResult)
If Not ModelState.IsValid Then
Return View(model)
End If
' This doesn't count login failures towards account lockout
' To enable password failures to trigger account lockout, change to shouldLockout := True
Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout := False)
Select Case result
Case SignInStatus.Success
Throw New System.Exception("Sign In Succeeded") 'Throws both with and without the debugger attached
Return RedirectToLocal(returnUrl)
Case SignInStatus.LockedOut
Return View("Lockout")
Case SignInStatus.RequiresVerification
Return RedirectToAction("SendCode", New With {
returnUrl,
model.RememberMe
})
Case Else
ModelState.AddModelError("", "Invalid login attempt.")
Return View(model)
End Select
End Function
Как ни странно, невозможность войти в систему сохраняется, даже если я удаляю только два атрибута <Authorize>
в проекте, которые, как я думал, будут устраненыс экрана входа в систему все вместе.(Они привязаны к классам AccountController
и ManagerController
, и их размещение соответствует другим проектам, которые я завершил в прошлом с использованием тех же шаблонов проектов)
Один из единственных связанных интернет-ресурсов, которые я могнайти это этот ТАК вопрос .Я собираю и развертываю на targetFramework 4.7.2, и мой файл web.config был сгенерирован шаблоном проекта, за исключением строки подключения к базе данных, но я включил ее на тот случай, если кто-то заметит что-то не так.
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=my secret token" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=very secret connection string"
providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.7.2" />
<httpRuntime targetFramework="4.7.2" />
<roleManager enabled="true" defaultProvider="MySqlRoleProvider">
<providers>
<add name="MySqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
applicationName="RFIDDataEntry"
connectionStringName="DefaultConnection"/>
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
....
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</configuration>
TLDR: Мое веб-приложение VB.NET не распознает пользователя, вошедшего в систему, когда приложение запускается без подключенного отладчика, даже если попытка входа в систему успешна.