gpt4 book ai didi

c# - 如何从 IHttpActionResult 方法返回自定义变量?

转载 作者:太空狗 更新时间:2023-10-29 21:12:51 28 4
gpt4 key购买 nike

我正在尝试使用 Ihttpstatus header 获取此 JSON 响应,该 header 声明代码 201 并将 IHttpActionResult 保留为我的方法返回类型。

我要返回的 JSON:

{"CustomerID": 324}

我的方法:

[Route("api/createcustomer")]
[HttpPost]
[ResponseType(typeof(Customer))]
public IHttpActionResult CreateCustomer()
{
Customer NewCustomer = CustomerRepository.Add();
return CreatedAtRoute<Customer>("DefaultApi", new controller="customercontroller", CustomerID = NewCustomer.ID }, NewCustomer);
}

JSON 返回:

"ID": 324, "Date": "2014-06-18T17:35:07.8095813-07:00",

以下是我尝试过的一些返回,这些返回要么给我 uri null 错误,要么给我一个类似于上面示例的响应。

return Created<Customer>(Request.RequestUri + NewCustomer.ID.ToString(), NewCustomer.ID.ToString());
return CreatedAtRoute<Customer>("DefaultApi", new { CustomerID = NewCustomer.ID }, NewCustomer);

使用 httpresponsemessage 类型的方法可以解决这个问题,如下所示。但是我想使用 IHttpActionResult:

public HttpResponseMessage CreateCustomer()
{
Customer NewCustomer = CustomerRepository.Add();
return Request.CreateResponse(HttpStatusCode.Created, new { CustomerID = NewCustomer.ID });
}

最佳答案

这会得到你的结果:

[Route("api/createcustomer")]
[HttpPost]
//[ResponseType(typeof(Customer))]
public IHttpActionResult CreateCustomer()
{
...
string location = Request.RequestUri + "/" + NewCustomer.ID.ToString();
return Created(location, new { CustomerId = NewCustomer.ID });
}

现在 ResponseType 不匹配。如果您需要此属性,则需要创建新的返回类型而不是使用匿名类型。

public class CreatedCustomerResponse
{
public int CustomerId { get; set; }
}

[Route("api/createcustomer")]
[HttpPost]
[ResponseType(typeof(CreatedCustomerResponse))]
public IHttpActionResult CreateCustomer()
{
...
string location = Request.RequestUri + "/" + NewCustomer.ID.ToString();
return Created(location, new CreatedCustomerResponse { CustomerId = NewCustomer.ID });
}

另一种方法是在 Customer 类上使用 DataContractAttribute 来控制序列化。

[DataContract(Name="Customer")]
public class Customer
{
[DataMember(Name="CustomerId")]
public int ID { get; set; }

// DataMember omitted
public DateTime? Date { get; set; }
}

然后只返回创建的模型

return Created(location, NewCustomer);
// or
return CreatedAtRoute<Customer>("DefaultApi", new controller="customercontroller", CustomerID = NewCustomer.ID }, NewCustomer);

关于c# - 如何从 IHttpActionResult 方法返回自定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297168/

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