gpt4 book ai didi

api - Web API Controller 方法 -- 请求为空

转载 作者:行者123 更新时间:2023-12-04 23:22:43 24 4
gpt4 key购买 nike

调用如下所示的方法时,Request 始终为空。我有一些简单的方法从 MVC4 应用程序中的 Controller 返回 JSON 数据, Controller 使用 ApiController 作为基类。我的目录函数的代码如下:

public HttpResponseMessage GetDirectory() {
try {
var dir = r.GetDirectory();
if (dir == null) {
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError));
}
var response = Request.CreateResponse(HttpStatusCode.OK, dir, "application/json");
response.Headers.Location = new Uri(Request.RequestUri, "directory");
return response;
} catch (Exception ex) {
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}

调用此方法时,'dir' 将从 r.GetDirectory() 正确加载。但请求为空。所以很自然地 Request.CreateResponse() 失败,依此类推。我正在寻找 Request 为空的原因,或者寻找允许返回保持 HttpResponseMessage 的重写。

这被称为(在我的单元测试项目中):
var ctrl = new DirectoryController();
var httpDir = ctrl.GetDirectory();

谢谢你的帮助。

最佳答案

Olav Nybø 给我留下了导致答案的提示。回复 ASP.NET WebApi unit testing with Request.CreateResponse , jonnii 建议使用以下代码:

        controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

这导致了一种测试 Controller 的好方法:
        var controller = new RecordsController();
controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());
var json = controller.GetAllRecords(id);
var records = JsonConvert.DeserializeObject<DynamicRecordSet>(json.Content.ReadAsStringAsync().Result);

关于api - Web API Controller 方法 -- 请求为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19842116/

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