首页 > 解决方案 > .NET Core 中的 RequestContext 等效项

问题描述

我是 .NET Core 的新手,我们从中间件发出客户端请求,我想知道从 .NET Core 中提取和设置它的正确方法httprequestcontexthttpcontext什么HttpRequestMessage

.NET Framework 有一种setrequestcontext()设置请求上下文的方法HttpRequestMessage,我在 .NET Core 中看不到类似的方法。

任何帮助,将不胜感激。

中间件:

    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        await next.Invoke(context).ConfigureAwait(false);
    
        // create a HTTPMessageRequest from context.
        HttpRequestMessage httpRequestMessage = context.CreateHttpRequestMessage();
        
        // make a remote call.
    }
    
    public static HttpRequestMessage CreateHttpRequestMessage(this HttpContext context)
            {
                _ = context ?? throw new ArgumentNullException(nameof(context));
    
                var request = context.Request;
    
                var requestMessage = new HttpRequestMessage();
                var requestMethod = request.Method;
                if (!HttpMethods.IsGet(requestMethod) &&
                    !HttpMethods.IsHead(requestMethod) &&
                    !HttpMethods.IsDelete(requestMethod) &&
                    !HttpMethods.IsTrace(requestMethod))
                {
                    var streamContent = new StreamContent(request.Body);
                    requestMessage.Content = streamContent;
                }
    
                requestMessage.RequestUri = new Uri(context.Request.GetDisplayUrl());
    
                // Copy the request headers
                foreach (var header in request.Headers)
                {
                    if (!requestMessage.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray()) && requestMessage.Content != null)
                    {
                        requestMessage.Content?.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray());
                    }
                }
    
                requestMessage.Method = new HttpMethod(request.Method);
                return requestMessage;
            }

标签: c#asp.net-core.net-core

解决方案


推荐阅读