2016-03-11 2 views
1

Я создаю методы отправки сообщений в ASP.NET 5 webapi. У меня есть требование, что мне нужно создать перегруженные методы post следующим образом.ASP.NET 5 WebAPI

[HttpPost] 
public bool LogInfo([FromBody]LogEventModel value) 
{ 
} 


[HttpPost] 
public bool LogInfo (String strInformation) 
{ 
} 

Я попробовал несколько опций для установки параметров маршрутизации следующим образом.

[HttpPost("LogInfo/{strInformation}")] 

(или)

[Route("LogInfo/{strInformation}")] 

Но ее не работает. Надеюсь, я что-то испортил. Может ли кто-нибудь помочь?

ответ

0

Я не думаю, что это возможно больше. Из-за того, что контроллеры и веб-API-контроллеры теперь одно и то же, маршрутизация также была унифицирована. Вы можете больше узнать об этом here.

Так что я хотел бы сделать это, это мой код контроллера:

public class HomeController : Controller 
{ 
    // GET: /<controller>/ 
    public IActionResult Index() 
    { 
     ViewBag.Title = [email protected]"{nameof(HomeController)}-{nameof(Index)}"; 
     return View(); 
    } 

    [HttpPost] 
    [Route("home/setsomething2", Name = "SetSomething2")] 
    public void SetSomething([FromBody]SomeValueModel someValue) 
    { 
     var value = someValue; 
    } 


    [HttpPost] 
    [Route("home/setsomething1", Name = "SetSomething1")] 
    public void SetSomething(String someValue) 
    { 
     var value = someValue; 
    } 
} 

public class SomeValueModel 
{ 
    [JsonProperty("somevalue")] 
    public string SomeValue { get; set; } 
} 

И это, как я назвал его из вида Index.cshtml:

function postSomething1() { 
    var url = "@Url.RouteUrl("SetSomething1", new {someValue = "someValue"})"; 
    $.post(url) 
     .done(function() { 
      alert("Succes!"); 
     }) 
     .fail(function (response) { 
      console.log(response); 
      alert("Fail!"); 
     }); 
} 
function postSomething2() { 
    var url = "@Url.RouteUrl("SetSomething2")"; 
    $.ajax({ 
     contentType: 'application/json', 
     data: JSON.stringify({ "somevalue": "myvalue" }), 
     dataType: 'json', 
     success: function() { 
      alert("Succes!"); 
     }, 
     error: function() { 
      alert("Error!"); 
     }, 
     processData: false, 
     type: 'POST', 
     url: url 
    }); 
} 

Вы можете однако сделать маршрутизация SetSomething2 более RESTful, как:

[Route("home/setsomething/{someValue}", Name = "SetSomething2")] 

Примечание: Обратите внимание, что путь «home/setsomething /» очищается от цифр, поэтому это был бы мой предпочтительный путь.

И если вы ДЕЙСТВИТЕЛЬНО не хотите использовать разные маршруты, вы не можете использовать именованные маршруты. Таким образом, вы будете иметь угробить имена, как:

[Route("home/setsomething")] 

И:

[Route("home/setsomething/{someValue}")] 

А затем вызвать их в JQuery, как, например:

var url = "home/setsomething/somevalue"; 
0

Вот что я делаю.

Я предпочитаю уточняющих маршруты для каждого контроллера по аннотирования их:

[Route("[controller]/[action]")] 

Затем действие может выглядеть следующим образом:

[HttpPost] 
[ActionName("GetSomeDataUsingSomeParameters")] 
public List<Thing> GetSomeDataUsingSomeParameters([FromBody] MyParameters parms) 
{ 
    return Repo.GetData(parms); 
} 

Запрос может выглядеть следующим образом:

http://myhost/mycontroller/GetSomeDataUsingSomeParameters 

Параметры передаются как структура Json в теле методом POST.Например:

{"Parameter1":1,"Parameter2":"a string"} 

Запрос должен указать:

Content-Type: application/json 

Так скажем, ваш класс Вещь:

public class Thing 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Тогда ответ может быть (с две вещи найдены в база данных):

[{"Id":1,"Name":"First thing"},{"Id":2,"Name":"Another thing"}] 
Смежные вопросы