我在ASP.NET 5 webapi中创建API post方法。我要求我需要创建重载的post方法,如下所示。
$new_commit
我尝试了多个选项来设置路由参数,如下所示。
[HttpPost]
public bool LogInfo([FromBody]LogEventModel value)
{
}
[HttpPost]
public bool LogInfo (String strInformation)
{
}
(或)
[HttpPost("LogInfo/{strInformation}")]
但它不起作用。我希望我在这里弄乱一些东西。有人可以帮忙吗?
答案 0 :(得分:0)
我不认为这是可能的。由于控制器和Web API控制器现在是同一个事实,路由也已统一。您可以阅读更多相关信息here。
所以我要做的是,这是我的控制器代码:
public class HomeController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
ViewBag.Title = $@"{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")]
注意:请注意路径&#39; home / setsomething /&#39;从数字中删除,所以这将是我最喜欢的方式。
如果你真的不想做出不同的路线,你就不能使用命名路线。因此,您必须抛弃以下名称:
[Route("home/setsomething")]
和
[Route("home/setsomething/{someValue}")]
然后在jQuery中调用它们,例如:
var url = "home/setsomething/somevalue";
答案 1 :(得分:0)
这就是我的工作。
我更喜欢通过以下方式为每个控制器指定路由:
[Route("[controller]/[action]")]
然后一个动作可能如下:
[HttpPost]
[ActionName("GetSomeDataUsingSomeParameters")]
public List<Thing> GetSomeDataUsingSomeParameters([FromBody] MyParameters parms)
{
return Repo.GetData(parms);
}
请求可能如下所示:
http://myhost/mycontroller/GetSomeDataUsingSomeParameters
通过POST方法将参数作为Json结构传递给正文。例如:
{"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"}]