У меня есть веб-приложение, развернутое в Azure. Во время тестирования я обнаружил, что одна из моих конечных точек не работает... иногда. Точнее, эта конечная точка POST всегда работает в моей среде разработки и случайным образом работает в Prod.
При сбое конечная точка моего контроллера не затрагивается (обнаруживается путем добавления журналов ), и возвращается «успешный» код 200, но содержимое ответа не отправляется. Тело моего POST крошечное, всего около 50 байт.
Я не уверен, является ли это подсказкой или нет, но, похоже, оно работает сразу после обновления браузера. , то, когда мой токен аутентификации обновляется, он терпит неудачу. Хотя это довольно анекдотично.
Погуглив, я обнаружил, что некоторым людям это помогает:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = null;
options.Limits.MinResponseDataRate = null;
});
Однако здесь не повезло. Есть идеи, что еще могло вызвать это? ИЛИ, есть идеи, как мне лучше .NET сказать мне, что не так? В моих журналах ничего нет.
Спасибо!
РЕДАКТИРОВАТЬ:
У меня есть два промежуточных программного обеспечения. :
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly JsonSerializerOptions jsonPolicy = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch (Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
}
private async Task HandleExceptionAsync(HttpContext context, Exception exception)
{
context.Response.ContentType = "application/json";
var response = context.Response;
string msg;
switch (exception)
{
case ApplicationException ex:
if (ex.Message.Contains("Invalid Token"))
{
response.StatusCode = (int)HttpStatusCode.Forbidden;
msg = ex.Message;
break;
}
response.StatusCode = (int)HttpStatusCode.BadRequest;
msg = ex.Message;
break;
default:
response.StatusCode = (int)HttpStatusCode.InternalServerError;
msg = exception.Message;
break;
}
var errorResponse = new
{
Failed = true,
ErrorMessage = msg
};
_logger.LogError(exception, exception.Message);
var result = JsonSerializer.Serialize(errorResponse, jsonPolicy);
await context.Response.WriteAsync(result);
}
}
и:
public class UserStatusMiddleware
{
private readonly RequestDelegate _next;
private readonly DbContextFactory DbContextFactory;
private readonly ILogger _logger;
private readonly JsonSerializerOptions jsonPolicy = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public UserStatusMiddleware(RequestDelegate next, DbContextFactory dbrderMonkeyContextFactory, ILogger logger)
{
_next = next;
_logger = logger;
DbContextFactory = dbContextFactory;
}
public async Task InvokeAsync(HttpContext httpContext)
{
using (DBContext dbContext = DbContextFactory.CreateDbContext())
{
var user = httpContext.User.FindFirst(ClaimTypes.NameIdentifier);
if (user == null)
{
throw new ArgumentException();
}
AspNetUser dbUser = dbContext.AspNetUsers.FirstOrDefault(x => x.Id == user.Value);
if (dbUser.IsDisabled || !dbUser.IsApproved)
{
httpContext.Response.ContentType = "application/json";
var response = httpContext.Response;
string msg;
var errorResponse = new
{
Failed = true,
IsDisabled = dbUser.IsDisabled,
IsApproved = dbUser.IsApproved,
ErrorMessage = "User is either disabled or not approved"
};
response.StatusCode = (int)HttpStatusCode.Unauthorized;
var result = JsonSerializer.Serialize(errorResponse, jsonPolicy);
await httpContext.Response.WriteAsync(result);
}
else
{
_next(httpContext);
}
}
}
}
public static class UserStatusMiddlewareExtensions
{
public static IApplicationBuilder UseUserStatusCheck(
this IApplicationBuilder builder)
{
return builder.UseMiddleware();
}
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... y-response
ASP.NET Core 6 случайным образом возвращает 200 с пустым ответом ⇐ C#
Место общения программистов C#
-
Anonymous
1711842459
Anonymous
У меня есть веб-приложение, развернутое в Azure. Во время тестирования я обнаружил, что одна из моих конечных точек не работает... иногда. Точнее, эта конечная точка POST всегда работает в моей среде разработки и случайным образом работает в Prod.
При сбое конечная точка моего контроллера не затрагивается (обнаруживается путем добавления журналов ), и возвращается «успешный» код 200, но содержимое ответа не отправляется. Тело моего POST крошечное, всего около 50 байт.
Я не уверен, является ли это подсказкой или нет, но, похоже, оно работает сразу после обновления браузера. , то, когда мой токен аутентификации обновляется, он терпит неудачу. Хотя это довольно анекдотично.
Погуглив, я обнаружил, что некоторым людям это помогает:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = null;
options.Limits.MinResponseDataRate = null;
});
Однако здесь не повезло. Есть идеи, что еще могло вызвать это? ИЛИ, есть идеи, как мне лучше .NET сказать мне, что не так? В моих журналах ничего нет.
Спасибо!
РЕДАКТИРОВАТЬ:
У меня есть два промежуточных программного обеспечения. :
public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly JsonSerializerOptions jsonPolicy = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch (Exception ex)
{
await HandleExceptionAsync(httpContext, ex);
}
}
private async Task HandleExceptionAsync(HttpContext context, Exception exception)
{
context.Response.ContentType = "application/json";
var response = context.Response;
string msg;
switch (exception)
{
case ApplicationException ex:
if (ex.Message.Contains("Invalid Token"))
{
response.StatusCode = (int)HttpStatusCode.Forbidden;
msg = ex.Message;
break;
}
response.StatusCode = (int)HttpStatusCode.BadRequest;
msg = ex.Message;
break;
default:
response.StatusCode = (int)HttpStatusCode.InternalServerError;
msg = exception.Message;
break;
}
var errorResponse = new
{
Failed = true,
ErrorMessage = msg
};
_logger.LogError(exception, exception.Message);
var result = JsonSerializer.Serialize(errorResponse, jsonPolicy);
await context.Response.WriteAsync(result);
}
}
и:
public class UserStatusMiddleware
{
private readonly RequestDelegate _next;
private readonly DbContextFactory DbContextFactory;
private readonly ILogger _logger;
private readonly JsonSerializerOptions jsonPolicy = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
public UserStatusMiddleware(RequestDelegate next, DbContextFactory dbrderMonkeyContextFactory, ILogger logger)
{
_next = next;
_logger = logger;
DbContextFactory = dbContextFactory;
}
public async Task InvokeAsync(HttpContext httpContext)
{
using (DBContext dbContext = DbContextFactory.CreateDbContext())
{
var user = httpContext.User.FindFirst(ClaimTypes.NameIdentifier);
if (user == null)
{
throw new ArgumentException();
}
AspNetUser dbUser = dbContext.AspNetUsers.FirstOrDefault(x => x.Id == user.Value);
if (dbUser.IsDisabled || !dbUser.IsApproved)
{
httpContext.Response.ContentType = "application/json";
var response = httpContext.Response;
string msg;
var errorResponse = new
{
Failed = true,
IsDisabled = dbUser.IsDisabled,
IsApproved = dbUser.IsApproved,
ErrorMessage = "User is either disabled or not approved"
};
response.StatusCode = (int)HttpStatusCode.Unauthorized;
var result = JsonSerializer.Serialize(errorResponse, jsonPolicy);
await httpContext.Response.WriteAsync(result);
}
else
{
_next(httpContext);
}
}
}
}
public static class UserStatusMiddlewareExtensions
{
public static IApplicationBuilder UseUserStatusCheck(
this IApplicationBuilder builder)
{
return builder.UseMiddleware();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78249555/asp-net-core-6-randomly-returning-200-with-empty-response[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия