2016-11-22 59 views
2

問題的重點在於爲請求提供標頭,所以我認爲只有HttpClient.SendAsync()方法纔會被考慮。不PostAsync或PostAsJsonAsycn()如何通過帶頭的HttpClient將複雜對象發佈到控制器的Post方法?

這裏是我用來發送POST請求的代碼:

var request = new HttpRequestMessage() 
{ 
    RequestUri = new Uri(@"http://test/" + controllerUri), 
    Method = HttpMethod.Post, 
}; 

request.Headers.Add(_authHeader, c_authToken); 
request.Content = new ObjectContent<RequestType>(content, new JsonMediaTypeFormatter()); 

var result = _client.SendAsync(request).Result; 

我經常收到500錯誤,指出時間屬性序列化的對象上是無效的,雖然在事實上它是在對象中設置的。

我試着將mediatype設置爲「application/json」的StringContent,但我得到了同樣的錯誤。

控制器的POST方法具有以下特徵:

公共HttpResponseMessage郵政(MyContentObject內容) { ... }

例外是進入到方法之前拋出。

有趣的是,當我註釋掉從MyContentObject [必需]屬性:

public class MyContentObject 
{ 
    [Required] 
    public int Duration { get; set; } 

    public decimal SomePropA { get; set; } 
    public bool SomePropB { get; set; } 
} 

它的工作原理和時間屬性設置正確的預期。

所以也許問題是爲什麼在這種情況下添加[必需]屬性爲什麼會造成這麼多問題?爲什麼有[Required]屬性添加到int屬性中,可能存在您的問題。我的回答是我不知道是誰加的,對我來說這沒有意義,但如果是這樣,請讓我知道。

謝謝

回答

1

我對此做了更多的研究。 所以我會從頭開始。本主題介紹了[必需的]註釋問題:http://aspnetwebstack.codeplex.com/workitem/270

基本上內置的InvalidModelValidatorProvider會像上面一樣檢查對無意義註釋的模型驗證(值類型屬性始終有一個值)並引發異常。上面的文章提到了一種解決方法,以避免在不更改現有註釋的情況下拋出異常。

下面的代碼,您可以發佈序列化爲JSON附標題的對象:

// var RequestType content <- this is an input parameter. 

var request = new HttpRequestMessage() 
{ 
    RequestUri = new Uri(@"http://test/" + yourControllerUri), 
    Method = HttpMethod.Post, 
}; 

request.Headers.Add("YourHeaderName", "YourHeaderValue"); 
request.Content = new ObjectContent<RequestType>(content, new JsonMediaTypeFormatter()); 

var result = _client.SendAsync(request).Result; 

我希望有人會發現它有用。

相關問題