【问题标题】:Unexpected data return from API using HTTPResponseMesssage使用 HTTPResponseMesssage 从 API 返回意外数据
【发布时间】:2018-06-11 10:40:33
【问题描述】:

我有这个问题,在我的响应正文中返回了我不想包含的数据,而我想要返回的数据没有包含在其中。我尝试使用 Swagger v1.0

数据返回

{
 "version": {
    "major": 1,
    "minor": 1,
    "build": -1,
    "revision": -1,
    "majorRevision": -1,
    "minorRevision": -1
  },
  "content": {
    "headers": [
      {
        "key": "Content-Type",
        "value": [
          "application/json"
        ]
      }
    ]
  },
  "statusCode": 200,
  "reasonPhrase": "OK",
  "headers": [],
  "isSuccessStatusCode": true
}

预期回报

这是我的代码:

[HttpGet]
    [Authorize]
    public HttpResponseMessage GetStudent(int id)
    {
        try
        {
            var student = _studentService.Find(id);
            return ModelHelper.ComposeResponse(HttpStatusCode.OK, student);
        }
        catch (Exception ex)
        {
            var exceptionMessage = ModelHelper.GetErrors(ex, _mailService);
            ModelState.AddModelError(new ValidationResult(exceptionMessage));
        }
        return ModelHelper.ComposeResponse(HttpStatusCode.BadRequest, ModelHelper.GetModelStateErrors(ModelState));
    }

助手代码

 public static HttpResponseMessage ComposeResponse(HttpStatusCode statusCode, object responseData)
        {
            var jsonResponse = JsonConvert.SerializeObject(responseData);
            var resp = new HttpResponseMessage
            {
                StatusCode = statusCode,
                Content = new StringContent(jsonResponse, Encoding.UTF8, Constants.Common.ApplicationJson)
            };

            resp.Content.Headers.ContentType = new MediaTypeHeaderValue(Constants.Common.ApplicationJson);

            return resp;
        }

【问题讨论】:

  • 这是 ASP.NET MVC 项目还是 ASP.NET MVC Core 项目? HttpResponseMessage 是一种 Web API 类型,MVC 不直接支持。
  • @CodeCaster MVC 核心项目先生

标签: c# httpresponse httpresponsemessage


【解决方案1】:

这是您可以使用 CreateResponse 函数实现此目的的一种方法。这将从您传递给 CreateResponse 函数的对象创建一个 json 输出。

响应将如下所示。

{"Stud_id":1,"Stud_name":"test"}

    public class StudentObject
    {
        public int Stud_id { get; set; }
        public string Stud_name { get; set; }
    }

    [HttpGet]
    public HttpResponseMessage GetStudent(int id)
    {
        StudentObject studentObject = new StudentObject
        {
            Stud_id = 1,
            Stud_name = "test"
        };
        return Request.CreateResponse(System.Net.HttpStatusCode.OK, studentObject);
    }

【讨论】:

  • 什么是 CreateResponse?我有一个错误。这是扩展名吗?
猜你喜欢
  • 2020-07-10
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多