2013-10-25 3 views
0

У меня возникли проблемы с отправкой комплексного объекта JSON в мой элемент управления User в моем проекте web api. Я продолжаю получать 404. У меня есть некоторые элементы управления (что-то с маршрутом/api/{control}/{action}/{id}), но ничего с маршрутом (/ api/{control}/{action}/{user }) будет работать для меня. Любая помощь будет принята с благодарностью.Отправка сложных параметров WEB API

конфигурация маршрута

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}" 
+0

ли вы изменить конфигурация маршрута, чтобы иметь пользователя в качестве последнего параметра? Вы передаете пользователя в теле, так что вам не нужно, чтобы – christiandev

ответ

2

Вам нужно изменить webapi route, так как он ожидает, что пользователь будет последним параметром. Вы можете просто установить это на {Id} как необязательный, так же как и по умолчанию.

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Кроме того, убедитесь, что контроллер API - UserController.

Когда вы размещаете из Скрипач, то JSON должен выглядеть следующим образом ...

{"UserLoginName": "steve", "UserID": -2147483637, "IsDeleted": false } 

Вместо того, чтобы ...

"{"UserLoginName": "steve ","UserID":-2147483637,"IsDeleted":false}" 

Посмотрите на routes here

+0

THank вы так много!. Маршрут не чувствителен к регистру – gh9

+0

@ gh9, без проблем ... Я понял, набрав это, я удалю его сейчас :) – christiandev

1

Ваш Json

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

+0

{«UserLoginName»: «steve», «UserID»: «- 2147483637», «IsDeleted»: «false»} все еще 404s на мне – gh9

Смежные вопросы