我想從C#調用休息API方法。問題是它傳遞null的所有內容類型爲body參數。我在下面分享了我的代碼。除了這段代碼之外,我嘗試寫入body參數來請求stream.It也沒有工作。我也嘗試過'application/x-www-form-urlencoded'作爲內容類型。RESTAPI身體參數在C#中調用時傳遞null#
調用從C#示例REST API方法:
string token = Server.UrlEncode("v0WE/49uN1/voNwVA1Mb0MiMrMHjFunE2KgH3keKlIqei3b77BzTmsk9OIREken1hO9guP3qd4ipCBQeBO4jiQ==");
string url = "http://localhost:2323/api/Applications/StartProcess?token=" + token;
string data = @"{""ProcessParameters"": [{ ""Name"":""flowStarter"",""Value"": ""Waffles"" }],
""Process"": ""RESTAPISUB""}";
System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
client.BaseAddress = new System.Uri(url);
byte[] cred = UTF8Encoding.UTF8.GetBytes("username:password");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred));
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
System.Net.Http.HttpContent content = new StringContent(data, UTF8Encoding.UTF8, "application/json");
HttpResponseMessage messge = client.PostAsync(url, content).Result;
string description = string.Empty;
if (messge.IsSuccessStatusCode)
{
string result = messge.Content.ReadAsStringAsync().Result;
description = result;
}
的REST API方法:
[HttpPost]
[ActionName("StartProcess")]
public int StartProcess([FromUri]string token,[FromBody]WorkflowStartParameters parameters)
{
try
{
LoginInformation info = CasheProcesses.ReadCashe(token);
eBAWSAPI api = Service.GetWSService();
WorkflowProcess proc = api.StartProcess(info.Id, info.Password, info.ImpersonateUserId, info.Language, parameters);
return proc.ProcessId;
}
catch (Exception ex)
{
throw new Exception("An error occured when starting process,exception detail:" + ex);
}
}
WorkflowStartParameters類結構:
public class WorkflowStartParameters
{
public WorkflowParameter[] ProcessParameters;
public string Process { get; set; }
}
public class WorkflowParameter
{
public string Name { get; set; }
public string Value { get; set; }
}
我已搜查這個問題很多。這似乎是一個非常普遍的問題。我剛剛發現這個解決方案正常工作,將請求參數傳遞給rest API方法並從那裏讀取身體參數。但對我來說這不是一個有效的解決方案。
如果您有任何想法,請隨時分享。
感謝, Zehra
您可以更新您的問題,並表示這是什麼物體看起來像:WorkflowStartParameters?我的猜測是你發送的內容不能序列化回該類型。你也應該考慮用像NewtonSoft.Json這樣的東西來解析你的對象到json中(如果你還沒有它的話,它有一個nuget pckage)。 –
確實命名了嗎?你有'工作流參數'在數據和'工作流參數'作爲參數..如果你剛剛離開'WorkflowParameter'從數據,只是通過字段 – JamieD77
@StephenBrickner感謝回覆,我認爲序列化是確切的問題,因爲當我發送身體參數作爲字符串,它工作正常。但我已經嘗試發送序列化的數據它傳遞仍復位類型爲null.By的方式,我已經添加了WorkflowStartParameters類結構到我的問題。 –