Промежуточное ПО .net-core возвращает пустой результатC#

Место общения программистов C#
Ответить
Anonymous
 Промежуточное ПО .net-core возвращает пустой результат

Сообщение Anonymous »

Я создаю веб-сайт с API, API требует проверки, чтобы пользователь получал только свои собственные данные. Я написал следующее промежуточное программное обеспечение для проверки входа в систему.

Код: Выделить всё

public class ApiAuthenticationMiddleware
{
private readonly RequestDelegate _next;
private readonly UserManager _userManager;
private readonly SignInManager _signInManager;

public ApiAuthenticationMiddleware(RequestDelegate next,
SignInManager signInManager,
UserManager usermanager)
{
_next = next;
_signInManager = signInManager;
_userManager = usermanager;
}

public async  Task Invoke(HttpContext context)
{
if (!context.Request.Query.ContainsKey("password") || !context.Request.Query.ContainsKey("email"))
{
context.Response.StatusCode = 401; //UnAuthorized
await context.Response.WriteAsync("Invalid User Key");
return;
}
var email = context.Request.Query["email"];
var password = context.Request.Query["password"];

var result = await _signInManager.PasswordSignInAsync(email, password, false, lockoutOnFailure: false);
if (result.Succeeded)
{
await _next.Invoke(context);
}
else if (//some more checks)
context.Response.StatusCode = 401; //UnAuthorized
await context.Response.WriteAsync("Invalid User Key");
return;
}
}
}
Я хочу, чтобы отображалась пустая страница или сообщение об ошибке, например «Неверный ключ пользователя», если у пользователя нет действительного входа в систему. Однако в данный момент происходит возвращение домашней страницы (поскольку мое промежуточное программное обеспечение вызывается до usemvc, а оператор возврата пропускает запрос контроллера, выполненный usemvc).

Мой соответствующий код в методе настройки в файле start.cs

Код: Выделить всё

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{

app.UseIdentity();
app.UseWhen(x => (x.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase)),
builder =>
{
builder.UseMiddleware();
});
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Как заставить мое промежуточное ПО возвращать пустую страницу с кодом состояния?

Обновить

Попробовав много вещей, я обнаружил, что когда удалил:

Код: Выделить всё

 context.Response.StatusCode = 401; //UnAuthorized
Все работает как положено, пользователь получает сообщение, указанное в:

Код: Выделить всё

await context.Response.WriteAsync("Invalid User Key");
Однако я не хочу, чтобы пользователь получал код состояния 200 при неудачном входе в систему, а код состояния 401. Но при использовании строки кода состояния пользователь перенаправляется. Итак, как я могу отправить код состояния без перенаправления?

Подробнее здесь: https://stackoverflow.com/questions/457 ... ank-result
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»