[英]Sending complex parameters to WEB API
我在向Web api項目中的User控件發送JSON復雜對象時遇到麻煩。 我不斷收到404。我有一些控件在工作(任何帶有路由/ api / {control} / {action} / {id}的控件),但沒有任何帶有路由的(/ api / {control} / {action} / {user })將為我工作。 任何幫助將不勝感激。
路線配置
config.Routes.MapHttpRoute(
name: "UserApi",
routeTemplate: "api/{controller}/{action}/{User}");
用戶對象
public class User
{
public String UserLoginName { get; set; }
public int UserID { get; set; }
public bool IsDeleted { get; set; }
}
控制器
[HttpPost]
public Models.User AddUser([FromBody]User targetUser)
{
var userDTO = new UserDTO();
var businessUser = userDTO.GetNewBusinessObject(targetUser);
return userDTO.GetNewServiceObject(businessUser.Add());
}
json請求
POST http://localhost:54002/api/user/AddUser HTTP/1.1
User-Agent: Fiddler
Host: localhost:54002
content-length: 69
content-type: application/json;charset=utf-8
"{"UserLoginName": "steve ","UserID":-2147483637,"IsDeleted":false}"
您需要更改webapi路由 ,因為它期望將用戶作為最后一個參數。 您可以將其默認設置為{ Id
},就像默認設置一樣。
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
另外,請確保API控制器為UserController
。
當您從Fiddler發布時,JSON應該看起來像這樣...
{"UserLoginName": "steve", "UserID": -2147483637, "IsDeleted": false }
代替...
"{"UserLoginName": "steve ","UserID":-2147483637,"IsDeleted":false}"
你的傑森
"{"UserLoginName": "steve ","UserID":-2147483637,"IsDeleted":false}"
嘗試這個
{"UserLoginName": "steve","UserID":"-2147483637","IsDeleted":"false"}
用於發布Web數據的代碼
User ObjUs = new User();
ObjUs.UserLoginName = "steve";
ObjUs.UserID = -2147483637;
ObjUs.IsDeleted = false;
System.Web.Script.Serialization.JavaScriptSerializer ObjSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
object sSeralize = ObjSerializer.Serialize(ObjUs);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:54002/api/user/AddUser HTTP/1.1");
byte[] data = Encoding.UTF8.GetBytes(sSeralize.ToString()); // Input Data
request.Method = "POST";
request.Accept = "application/json";
request.ContentType = "application/json";
Stream dataStream = request.GetRequestStream();
dataStream.Write(data, 0, data.Length);
dataStream.Close();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
StreamReader result = new StreamReader(resp.GetResponseStream());
if(result !=null)
{
if(!string.IsnullorEmpty(result.ReadToEnd()))
{
String sResponseData = result.ReadToEnd();
}
}
public class User
{
public String UserLoginName { get; set; }
public int UserID { get; set; }
public bool IsDeleted { get; set; }
}
檢查此站點以創建結構化的Json字符串: http : //json.parser.online.fr/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.