2015-06-21 1 views
2

Я в настоящее время работаю на веб-сайте только для удовольствия, используя AngularJS и ASP.net, этот пост является более обобщенным вопросом, потому что мне не интересно, как это сделать, я более или менее задаваясь вопросом, что такое лучшие практики. В настоящее время у меня есть метод в угловом как этотОпубликовать JSON to Asp.net через AngularJS

$scope.submit = function() { 
    console.log(JSON.stringify($scope.form)); 
    $http.post("/post/new", "'" + JSON.stringify($scope.form) + "'"). 
     success(function (data, status, headers, config) { 
      console.log("Success") 
      $location.path("/news"); 
     }).error(function (data, status, headers, config) { 
      console.log("Error"); 
     }); 
}; 

И тогда мой соответствующим Asp.net код:

[HttpPost][Route("New")] 
    public IHttpActionResult New([FromBody] string input) 
    { 
     JObject json = JObject.Parse(input); 
     Post p = new Post { Title = (string)json["title"], content = (string)json["content"] }; 
     db.Posts.Add(p); 
     db.SaveChanges(); 
     return Ok(); 
    } 

Однако я не считаю, что это лучшая практика, потому что первым я посылаю все в качестве строки и синтаксического анализа, но также потому, что если мои элементы Title или Content имеют символ, то ошибки программы. Мне интересно, что это лучший способ сделать это. Я считаю, что другой способ сделать это - передать мою модель в качестве параметров для моего метода, но мне интересно, есть ли другие способы сделать это помимо этого. Как я уже сказал, это не очень конкретный вопрос, я просто хочу узнать лучшие практики. (Немного кода для резервного копирования вашего ответа будет очень признателен)

Спасибо!

ответ

0

Вы должны разрешить JSON.Net выполнять десериализацию для вас в pipleline, а не в вашем методе. Кроме того, просто разместите сам объект, а не создайте строку json

$scope.submit = function() { 
    $http.post("/post/new", $scope.form). 
     success(function (data, status, headers, config) { 
      console.log("Success") 
      $location.path("/news"); 
     }).error(function (data, status, headers, config) { 
      console.log("Error"); 
     }); 
}; 

[HttpPost][Route("New")] 
public IHttpActionResult New([FromBody] Post input) 
{ 
    db.Posts.Add(input); 
    db.SaveChanges(); 
    return Ok(); 
} 
Смежные вопросы