我创建了3种测试属性路由的方法 我的2 GET方法似乎正在运行,但我无法理解如何让我的post方法工作。
我的路线方法是错误的,还是错误地将错误的数据传递给方法?
我的控制器:
JSON
在我的JS中我有:
[RoutePrefix("api/myTest")]
public class JobController : ApiController
{
[Route("{id:int}")]
[HttpGet]
public string GetJob(int id)
{
return String.Format("Job-{0}", id.ToString());
}
[Route("GetJob2/{id:int}")]
[HttpGet]
public string GetJob2(int id)
{
return String.Format("New and improved Job-{0}", id.ToString());
}
[Route("NewJob/{data}")]
[HttpPost]
public HttpResponseMessage NewJob(HttpRequestMessage request)
{
// Read and process xml
}
}
更新:
$.get('api/myTest/' + $("#jobID").val()) // Works
$.get('api/myTest/GetJob2/' + $("#jobID").val()) // Works
var data = "<root><name>Bob</name></root>";
$.post('api/myTest/NewJob/', data) // Fails 404 Error
更新2:
[Route("NewJob/{data}")]
[HttpPost]
public HttpResponseMessage NewJob(string request)
答案 0 :(得分:1)
直接来自webapi Attribute Routing documentation,并且在同一链接中也有受支持的约束表。
路线约束
路径约束允许您限制路径模板中的参数匹配方式。一般语法是&#34; {parameter:constraint}&#34;。例如:
[Route("users/{id:int}"]
public User GetUserById(int id) { ... }
[Route("users/{name}"]
public User GetUserByName(string name) { ... }
此处,只有&#34; id&#34;才会选择第一条路线。 URI的一个整数。否则,将选择第二条路线。
如果是XML,则不会通过url传递任何数据,因此这就是您的路径
[Route("NewJob")]
[HttpPost]
public HttpResponseMessage NewJob(HttpRequestMessage data)
{
// Read and process xml
}
并在jQuery POST中指定xml
var url = "";
var data = "";
$.ajax({
contentType: "text/xml",
dataType: "xml",
type: "post",
url: url,
data: data
});
此外,您之前的电话是
$.post('api/myTest/NewJob/', data) it should be '+' instead of ','
$.post('api/myTest/NewJob/'+ data)
较低的一个会给url无效,即400而不是404
答案 1 :(得分:0)
您的客户端发送的请求应与NewJob
名称的操作匹配,但您的操作所期望的param类型为HttpRequestMessage
类型,请求中的参数属于string
类型。
所以将动作更改为:
[Route("NewJob/{data}")]
[HttpPost]
public HttpResponseMessage NewJob(string data)
{
// Read and process xml
}
现在应该可以了。