Вам нужно будет создать CLR-процедуру, которая предоставляет функции регулярного выражения, как показано в этой статье .
Вероятно, вы получили свое промежуточное программное обеспечение, зарегистрированное в неправильном месте в конвейере. Порядок, в котором вы размещаете свое промежуточное ПО в startup.cs
, имеет значение. Например:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(async (context, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
context.Response.StatusCode = StatusCodes.Status403Forbidden;
await context.Response.WriteAsync(ex.Message);
}
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
В приведенном выше коде я зарегистрировал промежуточное программное обеспечение, подобное вашему в начале конвейера. ASP.NET Core обрабатывает любые запросы в том порядке, в котором вы их размещаете, поэтому мое собственное промежуточное программное обеспечение будет запускаться сначала для запроса. Однако ответы обрабатываются снизу вверх. Итак, в примере, когда исключение выбрасывается в контроллер (или где угодно), UseDeveloperExceptionPage
или UseExceptionHandler
сначала получат какое-либо исключение, обработайте его и измените код состояния на 500.
Если мы изменим порядок на это:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.Use(async (context, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
context.Response.StatusCode = StatusCodes.Status403Forbidden;
await context.Response.WriteAsync(ex.Message);
}
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
Теперь мы зарегистрировали наш обработчик после встроенного обработчика исключений для запроса, но, что более важно, перед ним для ответа. Таким образом, в этом случае, когда контроллер выдает исключение, наш обработчик поймает его, обработает и изменит код состояния на то, что мы хотим. Другие обработчики исключений не будут видеть исключение (если другой обработчик промежуточного кода не выдает исключение после нас).