asp.net: GET by参数不起作用
本文关键字:参数 不起作用 by GET net asp | 更新日期: 2023-09-27 18:06:13
我正在将一个web服务转换为使用OData。我已经创建了一个odatcontroller实现如下:
public class PersonController : ODataController
{
public PersonController()
{
}
public IHttpActionResult Get()
{
return Ok(new Person());
}
public IHttpActionResult Get([FromODataUri] int key)
{
return Ok(new Person());
}
protected override void Dispose(bool disposing)
{
}
}
并像这样注册模型:
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("Person");
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.MapODataServiceRoute(
routeName: "odata",
routePrefix: "odata",
model: builder.GetEdmModel());
web应用程序部署没有问题,第一个函数工作时,我调用:
http://localhost:9200/odata/Customer
->
{
"@odata.context":"http://localhost:9200/odata/$metadata#Person/$entity","Name":"John"
}
但是,调用http://localhost:9200/odata/Customer(1)失败,服务器日志上的跟踪显示没有找到路由:
iisexpress.exe Information: 0 : Response, Status=404 (NotFound), Method=GET, Url=http://localhost:9200/odata/Person(1), Message='Content-type='application/xml; charset=utf-8', content-length=unknown'
我尝试了不同的属性排列使用ODataRoutePrefix, ODataRoute, EnableQuery上的方法,到目前为止,我所做的似乎没有帮助。我看过的教程说,这应该工作,所以现在我想知道我应该如何得到这个工作。有人有什么想法吗?
我设法解决了我自己的问题。
问题是,实体中定义的Key类型是String。这意味着FromODataUri提取的键也必须是字符串类型!
在本例中,可以通过将key更改为String类型或将Person键更改为int类型来解决此问题。