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上的方法,到目前为止,我所做的似乎没有帮助。我看过的教程说,这应该工作,所以现在我想知道我应该如何得到这个工作。有人有什么想法吗?

asp.net: GET by参数不起作用

我设法解决了我自己的问题。

问题是,实体中定义的Key类型是String。这意味着FromODataUri提取的键也必须是字符串类型!

在本例中,可以通过将key更改为String类型或将Person键更改为int类型来解决此问题。