Я не думаю, что это возможно больше. Из-за того, что контроллеры и веб-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";