Я боролся с этой самой основной проблемой весь день. В долгосрочной перспективе я пытаюсь сохранить аутентификацию форм .NET, но заменим модуль авторизации по умолчанию на пользовательский.
Однако, прежде чем я туда доберусь, мне просто нужен мой собственный IHttpModule для вызова.
Я скопировал этот код из сети как базовый шаблон, чтобы начать:
public class UrlAuthorizationModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(context_AuthenticateRequest);
context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
}
void context_AuthenticateRequest(object sender, EventArgs e)
{
var sting = "";
}
void context_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication context = (HttpApplication)sender;
if (context.Request.Url.AbsoluteUri.Contains("Oregon"))
return;
else
throw new UnauthorizedAccessException();
//if (context.User != null && context.User.Identity.IsAuthenticated)
//{
// HttpContext _httpContext = context.Context;
// SiteMapNode node = SiteMap.Provider.FindSiteMapNode(_httpContext);
// if (node == null)
// throw new UnauthorizedAccessException();
//}
}
public void Dispose()
{
}
}
И я поместил это в web.config:
<system.web>
<httpModules>
<remove name="UrlAuthorization" />
<add name="UrlAuthorizationModule" type="MyNamespace.UrlAuthorizationModule, common" />
Однако это не вызывали вообще. Ничего не происходило Затем я понял, что, вероятно, использую iis7, поэтому добавил:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlAuthorization" />
<add name="UrlAuthorizationModule" type="MyNamespace.UrlAuthorizationModule, common" />
<add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v17.2, Version=17.2.5.0, Culture=neutral, PublicKeyToken=B88D1754D700E49A" name="ASPxHttpHandlerModule" />
К сожалению, как только я добавлю тэг «add» внутри system.webServer / modules, сайт вообще не загрузится. Вместо этого генерируется общая ошибка 500.
Ошибка сервера
500 - Внутренняя ошибка сервера.
Проблема с ресурсом, который вы ищете,
не может быть отображено.
Насколько я могу судить, мой синтаксис правильный. Пользовательский модуль DevExpress работает правильно, и из-за него не выдается никаких ошибок, поэтому я знаю, что именно мои дополнения вызывают проблемы. Если я удаляю строку «добавить», то сайт загружается правильно, он просто не вызывает мой пользовательский IHttpModule.
Ничего не отображается в системном журнале. Это должно быть что-то действительно глупое, я просто не вижу этого.
EDIT:
Я использую Microsoft Visual Studio 2017 (которая использует IISExpress) на моей локальной машине win 10 dev. Я нашел некоторые файлы TraceLogFiles по адресу: C: \ Users \ username \ Documents \ IISExpress \ TraceLogFiles \ website \ fr000001.xml и внутри, где была эта ошибка.
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>3</Level>
<Opcode>16</Opcode>
<Keywords>0x100</Keywords>
<TimeCreated SystemTime="2018-11-13T15:25:30.609Z"/>
<Correlation ActivityID="{80001795-0008-FD00-B63F-84710C7967BB}"/>
<Execution ProcessID="41168" ThreadID="40824"/>
<Computer>machine name</Computer>
</System>
<EventData>
<Data Name="ContextId">{80001795-0008-FD00-B63F-84710C7967BB}</Data>
<Data Name="ModuleName">IIS Web Core</Data>
<Data Name="Notification">1</Data>
<Data Name="HttpStatus">500</Data>
<Data Name="HttpReason">Internal Server Error</Data>
<Data Name="HttpSubStatus">19</Data>
<Data Name="ErrorCode">2147942433</Data>
<Data Name="ConfigExceptionInfo">\\?\C:\Users\username\Documents\websitepath\web.config ( 394) :Lock violation
</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode>
<Keywords>
<Keyword>RequestNotifications</Keyword>
</Keywords>
<freb:Description Data="Notification">BEGIN_REQUEST</freb:Description>
<freb:Description Data="ErrorCode">The process cannot access the file because another process has locked a portion of the file.
(0x80070021)</freb:Description>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
</ExtendedTracingInfo>
</Event>
Насколько я могу судить, он жалуется, что файл web.config заблокирован другим процессом. Но это не имеет смысла. Просто чтобы быть в безопасности, я изменил порт разработчика, над которым работал, на новое случайное число со старого случайного числа, которое я использовал, и это не имело никакого влияния. Учитывая, что сайт работает без пользовательского модуля, это означает, что базовые разрешения для файлов web.config в порядке.