简体   繁体   English

如何修复Web API控制器单元测试异常-接受标头无效

[英]How to fix web api controller unit testing exception - accept header invalid

I'm using the Request.CreateResponse method in asp.net web api (.net 4.5) to attempt to return a response after a PUT op. 我在asp.net Web API(.net 4.5)中使用Request.CreateResponse方法尝试在PUT操作之后返回响应。

documentSession.SaveChanges();

// Http PUT response must return URI to created / updated resource  
// Line below throws exception                              
var response = Request.CreateResponse<T>(HttpStatusCode.Created, resource);
response.Headers.Location = new Uri(Request.RequestUri, pathToResource);
return response;

My unit tests currently use this method to setup the request context: 我的单元测试当前使用此方法来设置请求上下文:

public static void SetupControllerContext(BaseApiController controller, HttpMethod method)
{                   
       controller.Request = new HttpRequestMessage(method, "http://localhost");
       //controller.Request.Headers.Add("Accept", "application/json");            
       var configuration = new System.Web.Http.HttpConfiguration(new System.Web.Http.HttpRouteCollection());            
       controller.Request.Properties["MS_HttpConfiguration"] = configuration;
}

The exception (thrown on the Request.CreateResponse method above) is: The format of value 'application/json; 异常(上面的Request.CreateResponse方法引发)是: 值'application / json的格式; charset=utf-8' is invalid. charset = utf-8'无效。

Stacktrace: 堆栈跟踪:

 at System.Net.Http.Headers.MediaTypeHeaderValue.CheckMediaTypeFormat(String mediaType, String parameterName)
   at System.Net.Http.Headers.MediaTypeHeaderValue..ctor(String mediaType)
   at System.Net.Http.ObjectContent.BuildHeaderValue(String mediaType)
   at System.Net.Http.ObjectContent`1..ctor(T value, MediaTypeFormatter formatter, String mediaType)
   at System.Net.Http.HttpRequestMessageExtensions.CreateResponse[T](HttpRequestMessage request, HttpStatusCode statusCode, T value, HttpConfiguration configuration)
   at System.Net.Http.HttpRequestMessageExtensions.CreateResponse[T](HttpRequestMessage request, HttpStatusCode statusCode, T value)
   at SoftModel.UI.Html.Controllers.BaseApiController.SaveChanges[T](T resource, String pathToResource) in c:\Users\Us\Documents\Visual Studio 2010\Projects\SoftModel\SoftModel.UI.Html\Controllers\BaseApiController.cs:line 113
   at SoftModel.UI.Html.Controllers.InstanceController.Put(Record record) in c:\Users\Us\Documents\Visual Studio 2010\Projects\SoftModel\SoftModel.UI.Html\Controllers\InstanceController.cs:line 62
   at SoftModel.Tests.InstanceApiControllerTests.Put_Valid_Record_Returns_Record_URI() in c:\Users\Us\Documents\Visual Studio 2010\Projects\SoftModel\SoftModel.Tests\InstanceControllerTests.cs:line 69

I've checked the source of the MediaTypeHeaderValue and cannot work out what is wrong? 我已经检查了MediaTypeHeaderValue的来源,但无法找出问题所在?

Sounds very much like this http://stackoverflow.com/questions/11988027/exceptions-with-webapi-request-formatting 听起来很像这样http://stackoverflow.com/questions/11988027/exceptions-with-webapi-request-formatting

Edit: updated link to better page 编辑:更新链接到更好的页面

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM