如何从HttpRequestMessage

时间:2018-07-17 08:42:56

标签: asp.net asp.net-mvc-4 asp.net-mvc-5 asp.net-web-api2 asp.net-web-api-routing

我创建了一个从DelegatingHandler继承的类并覆盖SendAsync方法。我想在将请求参数传递给主控制器之前验证请求参数并使用AntiXss类对其进行编码。因此,我创建了这个。现在,当我通过SoapUI调用相应的控制器时,我成功地进入了 Async 方法并获得了请求对象。

难度 我无法从我从soap ui传递的 HTTPREQUESTMESSAGE 对象中获取请求参数。下面是请求的快照

enter image description here

代码

protected override System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> SendAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        //Encode here the request object 
        var requestObj= request.GetQueryNameValuePairs()
                   .ToDictionary(kv => kv.Key, kv => kv.Value,
                        StringComparer.OrdinalIgnoreCase);
        // work on the request
        System.Diagnostics.Trace.WriteLine(request.RequestUri.ToString());

        return base.SendAsync(requestObj, cancellationToken)
         .ContinueWith(task =>
         {
           // work on the response
           var response = task.Result;
             response.Headers.Add("X-Dummy-Header", Guid.NewGuid().ToString());
             return response;
         });
    }

    #endregion
}

我只是想获取我从SOAP UI在HTTPRequestMessage对象下传递的参数值。但直到现在都没有成功。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

经历了某些文章和问题之后,我终于找到了解决方案:

var content = request.Content;
        string jsonContent = content.ReadAsStringAsync().Result;

上面的代码运行完美