带参数的Odata函数抛出500

时间:2016-04-14 09:54:43

标签: odata asp.net-web-api2

我的控制器之一有点问题。

每次我尝试用参数调用某个函数时抛出500,而在调试时我可以看到该函数甚至没有被调用。

首先是我的WebApiConfig:

html.push("<table id='table'></table>");
html.push("<div id='jqGridPager'></div>");
$('body').append(html.join(""));

我的实体:

public static class WebApiConfig
{
        public static void Register(HttpConfiguration config)
        {
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Entity>("Entities");
            builder.EntitySet<DataTypes>("DataTypes");
            builder.EntitySet<ObjectValue>("ObjectValues");
            builder.EntitySet<Attributes>("Attributes");
            builder.EntitySet<Objects>("Objects");
            builder.Namespace = "EAVService.Controllers";
            builder.Action("FullAttributes").Returns<IHttpActionResult>()
                .CollectionParameter<Attributes>("Attributes");
            builder.Action("FullValues").Returns<IHttpActionResult>()
                .CollectionParameter<ObjectValue>("ObjectValue");

            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: "odata",
                model: builder.GetEdmModel());
            config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
        }
    }

和我的控制器:

[Table("ObjectValue")]
public partial class ObjectValue
{
    public ObjectValue()
    {


    }
    [Key]
    [Column(Order = 0)]
    public int ObjectId { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(50)]
    public string Attribute { get; set; }

    [StringLength(256)]
    public string AttributeVal { get; set; }

    public virtual Attributes Attributes { get; set; }

    public virtual Objects Objects { get; set; }
}

....}

第一个Get方法正常运行。

说到参数第二次获取内部服务器错误。

http://localhost:80/EAVServiceAPI/odata/ObjectValues(1)

有人能给我一些暗示可能出错的事吗?

此致 安德烈

2 个答案:

答案 0 :(得分:0)

使用密钥的方法应返回ObjectValue而不是IQueryable<ObjectValue>key参数错误,它与ObjectValue对象上的密钥不匹配。您的意思是ObjectId上的AttributeObjectValue上有关键属性吗?如果是这样,您需要在GetObjectValues方法上使用名称与键匹配的2个关键参数,否则请删除其中一个Key属性,并确保key参数的类型与类型匹配ObjectValue上的密钥。

答案 1 :(得分:0)

我不知道我的配置到底出错了什么,但这解决了我的问题:

http://localhost/EAVServiceAPI/odata/ObjectValues?objectId=1

此致 安德烈