Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SingleResult的Odata序列化错误。在空IQueryable上创建_C#_Serialization_Asp.net Web Api_Odata_Iqueryable - Fatal编程技术网

C# SingleResult的Odata序列化错误。在空IQueryable上创建

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;

我正在使用OData v4,并试图让一个非常简单的控制器工作:

控制器:

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会有帮助的