Linux의 ASP.Net Core Web API에서 처리되지 않은 예외

Aaron Rumford

단일 노드가있는 ASP.Net Core 3.1 WebAPI가 있습니다. (이것은 본질적으로이 체인의 궁극적 인 끝에서 악몽 같은 화이트리스트를 처리 할 필요가없는 프록시 끝점입니다.) 또한 제가 제어하는 ​​클라이언트는 모두 프로그래밍 방식으로 동일한 요청을 프록시에 보냅니다. 가끔 또는 자주 Kestral 서버는 Linux 서버의 syslog에 다음 오류를보고합니다.

Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:       An unhandled exception has occurred while executing the request.
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]: Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Unexpected end of request content.
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException.Throw(RequestRejectionReason reason)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1ContentLengthMessageBody.ReadAsyncInternal(CancellationToken cancellationToken)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream.ReadAsyncInternal(Memory`1 buffer, CancellationToken cancellationToken)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at System.Text.Json.JsonSerializer.ReadAsync[TValue](Stream utf8Json, Type returnType, JsonSerializerOptions options, CancellationToken cancellationToken)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BindModelAsync(ModelBindingContext bindingContext)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMeta
data metadata, Object value)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]: --- End of stack trace from previous location where exception was thrown ---
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boo
lean isCompleted)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isComple
ted)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Oct  2 19:06:52 CCBD-Status-API-East CCBD-Status-API[979]:    at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

요청이 매우 적다

{'Url': '<URL data>', 'Status': 0}

API 컨트롤러 코드 :

public IActionResult GetStreamStatus([FromBody] StreamInfo input)
{
    try
    {
        if (!ModelState.IsValid) return BadRequest();
        NetworkCredential netCred = new NetworkCredential(_config.Value.User, _config.Value.Pass);
        var cred = new CredentialCache();
        cred.Add(new Uri(input.Url), "Digest", netCred);
        _logger.LogInformation($"Attempting to get status from: {input.Url}");
        var httpClient = new HttpClient(new HttpClientHandler {Credentials = cred, PreAuthenticate = true});
        var resp = httpClient.GetAsync(new Uri(input.Url));
        _logger.LogInformation($"{input.Url} returned: {resp.Result.StatusCode}");
        input.Status = (int) resp.Result.StatusCode;

        return Ok(input);
    }
    catch (Exception e)
    {
        _logger.LogError(e.ToString());
        return BadRequest();
    }
}

Startup.cs 구성 방법

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseExceptionHandler(a => a.Run(async context =>
    {
        var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
        var exception = exceptionHandlerPathFeature.Error;

        var result = JsonConvert.SerializeObject(new {error = exception.Message});
        context.Response.ContentType = "application/json";
        await context.Response.WriteAsync(result);
    }));

    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

편집 : 클라이언트 코드 추가

def check_stream(tc, app, feed, server):
    try:
        logger.info("Check Stream: {}".format(server))
        stream_url = ""
        if server == 'pri':
            stream_url = <Building URL>
        elif server == 'bak':
            stream_url = <Building URL>

        json_input = {"Url": stream_url, "Status": 0}
        logger.info(json_input)
        headers = {'Content-Type': 'application/json'}

        resp = requests.post(<Proxy URL>, data=json.dumps(json_input),
                             headers=headers)
        
        logger.info(resp.headers)
        logger.info("Response Text: {}".format(resp.text))
        results = json.loads(resp.text)
        code = results.get('status')

        return code
    except Exception as e:
        logger.error("Stream Check exception: {} {}".format(type(e).__name__, str(e.args)))
Aaron Rumford

나는 그것을 알아. 노드를 비동기로 옮겼고 문제없이 작동합니다.

public async Task<IActionResult> GetStreamStatusAsync([FromBody] StreamInfo input)
{
    try
    {
        if (!ModelState.IsValid) return BadRequest();
        NetworkCredential netCred = new NetworkCredential(_config.Value.User, _config.Value.Pass);
        var cred = new CredentialCache();
        cred.Add(new Uri(input.Url), "Digest", netCred);
        _logger.LogInformation($"Attempting to get status from: {input.Url}");
        var httpClient = new HttpClient(new HttpClientHandler {Credentials = cred, PreAuthenticate = true});
        var resp = await httpClient.GetAsync(new Uri(input.Url));
        _logger.LogInformation($"{input.Url} returned: {resp.StatusCode}");
        input.Status = (int) resp.StatusCode;

        return Ok(input);
    }
    catch (Exception e)
    {
        _logger.LogError(e.ToString());
        return BadRequest();
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ASP.Net Core-IISHttpServer.HandleRequest의 예기치 않은 예외

분류에서Dev

Asp.Net Core 3.1에서 SignalR 허브의 모든 예외 처리

분류에서Dev

ASP.NET Core 3에서 400에서 500까지의 예외를 처리하는 방법

분류에서Dev

ASP.NET Core 필터에서 throw 된 예외 처리

분류에서Dev

Linux에서 처리되지 않은 신호 예외 해석

분류에서Dev

Asp Core에서 Angular2 WebPack을 사용할 때 : 요청을 처리하는 동안 처리되지 않은 예외가 발생합니다.

분류에서Dev

asp.net webapi 및 TPL로 처리되지 않은 예외 잡기

분류에서Dev

컨트롤러의 asp.net mvc 예외가 사용자 정의 ErroHandler에서 처리되지 않았습니다.

분류에서Dev

Express의 처리되지 않은 예외

분류에서Dev

C ++의 "처리되지 않은 예외"

분류에서Dev

처리되지 않은 모든 예외를 기록하도록 dot net core에서 log4net을 설정하려면 어떻게해야합니까?

분류에서Dev

ASP.NET Core 서비스 범위 팩토리 정의되지 않은 동작

분류에서Dev

서비스를 등록하지 않은 웹 API asp.net mvc6 앱의 예외

분류에서Dev

웹 API 요청이 처리되지 않음 Asp.net Core 3.1 및 Axios

분류에서Dev

Python 패키지에서 처리되지 않은 예외 처리

분류에서Dev

C # 및 ASP .Net의 예외 처리

분류에서Dev

ASP.NET Core rc2의 전역 예외 처리는 예외 필터없이 작동합니다.

분류에서Dev

CORS에 의존하는 Java EE 7 Server API에서 포착되지 않은 예외 처리

분류에서Dev

처리되지 않은 거부 (오류) : 'WebPortal'에 대한 설정을로드 할 수 없음-ASP.NET Core React

분류에서Dev

System.Core.dll에서 'System.ArgumentNullException'유형의 처리되지 않은 예외가 발생하는 이유는 무엇입니까?

분류에서Dev

opencv_core310.dll에서 findContours 함수를 사용할 때 OpenCV에서 처리되지 않은 예외 발생

분류에서Dev

ASP.NET 웹 API 2 : 예외 처리기 및 로거가 모든 오류를 처리하지 않음

분류에서Dev

별도의 클래스 파일에서 ASP.NET (C #)의 예외 처리

분류에서Dev

ASP.NET Core에서 gRPC 서비스에 대한 전역 예외 처리기를 추가하는 방법은 무엇입니까?

분류에서Dev

System.Core.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.

분류에서Dev

ASP.NET Core Razor-전역 예외 처리기

분류에서Dev

System.Web.Extensions.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.

분류에서Dev

Angular MSAL AD 401은 Angular 앱에서 권한이 없지만 Postman에서는 200 Ok-ASP.NET Core Web API

분류에서Dev

Web API의 OnApplicationError 이벤트에서 예외 처리

Related 관련 기사

  1. 1

    ASP.Net Core-IISHttpServer.HandleRequest의 예기치 않은 예외

  2. 2

    Asp.Net Core 3.1에서 SignalR 허브의 모든 예외 처리

  3. 3

    ASP.NET Core 3에서 400에서 500까지의 예외를 처리하는 방법

  4. 4

    ASP.NET Core 필터에서 throw 된 예외 처리

  5. 5

    Linux에서 처리되지 않은 신호 예외 해석

  6. 6

    Asp Core에서 Angular2 WebPack을 사용할 때 : 요청을 처리하는 동안 처리되지 않은 예외가 발생합니다.

  7. 7

    asp.net webapi 및 TPL로 처리되지 않은 예외 잡기

  8. 8

    컨트롤러의 asp.net mvc 예외가 사용자 정의 ErroHandler에서 처리되지 않았습니다.

  9. 9

    Express의 처리되지 않은 예외

  10. 10

    C ++의 "처리되지 않은 예외"

  11. 11

    처리되지 않은 모든 예외를 기록하도록 dot net core에서 log4net을 설정하려면 어떻게해야합니까?

  12. 12

    ASP.NET Core 서비스 범위 팩토리 정의되지 않은 동작

  13. 13

    서비스를 등록하지 않은 웹 API asp.net mvc6 앱의 예외

  14. 14

    웹 API 요청이 처리되지 않음 Asp.net Core 3.1 및 Axios

  15. 15

    Python 패키지에서 처리되지 않은 예외 처리

  16. 16

    C # 및 ASP .Net의 예외 처리

  17. 17

    ASP.NET Core rc2의 전역 예외 처리는 예외 필터없이 작동합니다.

  18. 18

    CORS에 의존하는 Java EE 7 Server API에서 포착되지 않은 예외 처리

  19. 19

    처리되지 않은 거부 (오류) : 'WebPortal'에 대한 설정을로드 할 수 없음-ASP.NET Core React

  20. 20

    System.Core.dll에서 'System.ArgumentNullException'유형의 처리되지 않은 예외가 발생하는 이유는 무엇입니까?

  21. 21

    opencv_core310.dll에서 findContours 함수를 사용할 때 OpenCV에서 처리되지 않은 예외 발생

  22. 22

    ASP.NET 웹 API 2 : 예외 처리기 및 로거가 모든 오류를 처리하지 않음

  23. 23

    별도의 클래스 파일에서 ASP.NET (C #)의 예외 처리

  24. 24

    ASP.NET Core에서 gRPC 서비스에 대한 전역 예외 처리기를 추가하는 방법은 무엇입니까?

  25. 25

    System.Core.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.

  26. 26

    ASP.NET Core Razor-전역 예외 처리기

  27. 27

    System.Web.Extensions.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.

  28. 28

    Angular MSAL AD 401은 Angular 앱에서 권한이 없지만 Postman에서는 200 Ok-ASP.NET Core Web API

  29. 29

    Web API의 OnApplicationError 이벤트에서 예외 처리

뜨겁다태그

보관