C# SingleResult的Odata序列化错误。在空IQueryable上创建
我正在使用OData v4,并试图让一个非常简单的控制器工作: 控制器:C# SingleResult的Odata序列化错误。在空IQueryable上创建,c#,serialization,asp.net-web-api,odata,iqueryable,C#,Serialization,Asp.net Web Api,Odata,Iqueryable,我正在使用OData v4,并试图让一个非常简单的控制器工作: 控制器: public class ProductController : ODataController { readonly MasterDataEntities db = new MasterDataEntities(); [EnableQuery(PageSize = MaxPageSize)] public IQueryable<Product> Get() { return db.Products;
public class ProductController : ODataController
{
readonly MasterDataEntities db = new MasterDataEntities();
[EnableQuery(PageSize = MaxPageSize)]
public IQueryable<Product> Get()
{
return db.Products;
}
[EnableQuery]
public SingleResult<Product> Get([FromODataUri] string key)
{
return SingleResult.Create(db.Products.Where(p => p.Code == key));
}
}
公共类ProductController:ODataController
{
只读MasterDataEntities db=新的MasterDataEntities();
[启用查询(PageSize=MaxPageSize)]
公共IQueryable Get()
{
返回数据库产品;
}
[启用查询]
公共SingleResult获取([FromODataUri]字符串键)
{
返回SingleResult.Create(db.Products.Where(p=>p.Code==key));
}
}
WebApiConfig:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Product");
builder.EntityType<Product>().HasKey(p => p.Code);
config.MapODataServiceRoute("ODataRoute", null, builder.GetEdmModel());
ODataModelBuilder=new ODataConventionModelBuilder();
建造商实体集(“产品”);
builder.EntityType().HasKey(p=>p.Code);
config.MapODataServiceRoute(“ODataRoute”,null,builder.getedModel());
当我致电servicelocation/Product(“abc”)时
如果abc是一个有效的代码,我会得到一个很好的JSON序列化产品对象
如果abc是无效代码,则会出现以下错误:
无法使用ODataMediaTypeFormatter序列化'SingleResult'1'
位于System.Web.OData.Formatter.ODataMediaTypeFormatter.GetSerializer(类型类型、对象值、IEdmModel模型、ODataSerializerProvider serializerProvider)
我已经花了两天时间寻找解决方案,但似乎没有其他人能解决这个问题?请查看此解决方案 一种解决方法,可以识别SingleResult类型何时不包含任何结果,并将其替换为404,而不是引发SerializationException
绝对危险!昨天就应该问这个哈哈!谢谢你,我对这个解决办法有意见。如果使用一个$batch请求,其中一个SingleResults为空,它将返回整个$batch的404,而不仅仅是该部分。请有人解释一下如何使用该解决方法的步骤吗?。我是新来的。NET会有帮助的