簡體   English   中英

將復雜參數發送到WEB API

[英]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}"

看看routes hereroutes here

你的傑森

      "{"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM