gpt4 book ai didi

c# - 更改 WCF Web Api HttpContext 响应

转载 作者:行者123 更新时间:2023-11-30 22:37:55 24 4
gpt4 key购买 nike

使用 WCF Web API,我将如何在应用程序逻辑运行后但返回给用户之前更改响应的内容主体。目标是如果 suppressstatuscontent 为真,我们:

  • 在内容正文中添加状态码字段
  • 将响应的状态码更改为 200

我已经覆盖了一个 DelegatingChannel 并且在 SendAsnyc 中有一些代码看起来像这样:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(task =>
{
var response = task.Result;

if (CheckIfRequestHadSuppressStatusCode(request) == true)
{
string newResponse = (response.Content == null) ? "" : response.Content.ReadAsString();
newResponse = "<body>" +newResponse + "</body><statuscode>" + response.StatusCode + "</statuscode>";
response.StatusCode = HttpStatusCode.OK;
}
return response;
});

一个主要问题是不能同时处理xmlJson。我觉得必须有更好的方法来解决这个问题,因为这感觉很老套。

最佳答案

我不确定正确的方法,但我会尝试这样的事情:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken)
.ContinueWith<HttpResponseMessage>(task =>
{
var response = task.Result;
if (CheckIfRequestHadSuppressStatusCode(request) == true)
{
switch(response.Content.Headers.ContentType.MediaType)
{
case "application/xml":
response.Content = new XmlWithStatusContent(response.Content)
break;
case "application/json":
response.Content = new JsonWithStatusContent(response.Content)
break;
}

response.StatusCode = HttpStatusCode.OK;
}

return response;
});
}

您可以将添加额外状态代码标记的代码封装在特定版本的 HttpContent(例如 XmlWithStatusContent 和 JsonWithStatusContent)中。

关于c# - 更改 WCF Web Api HttpContext 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6313461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com