如何使用三角洲 从代码首先\\ JsonMediaTypeFormatter微软的ASP.NE

2019-07-19 09:41发布

问题是什么?

我试图让我的ASP.net网页API应用程序打补丁。 我使用的代码第一个实体框架。

我有我可以设置断点下面的方法头,它会击中:

[AcceptVerbs("PATCH")]
public async Task<HttpResponseMessage> Patch(long appId, long id, Delta<SimpleFormGroup> formGroup)

然而,当我打电话formGroup.Patch(实体),没有任何修改,我的实体作出。 如果我把下列立即窗口:

formGroup.GetChangedPropertyNames()

那么这个集合是空的,这似乎是错误的。

我有什么企图?

我一直在参照下面的例子

http://techbrij.com/http-patch-request-asp-net-webapi http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta /

这似乎是使用JSON的MediaType格式化不知道如何正确地构建增量对象的问题,然而在第二连杆菲利普似乎表明,它应该没有oDataMediaTypeFormatter工作。

我已经开始了一个尝试,以连载我的模型EDMX表示行,然后从那里提取CSDL这样我就可以创建一个oDataMediaTypeFormatter,但我遇到了阻碍有太多,再加上它似乎有点矫枉过正。

如果任何人都可以对这个有何启示它会非常感激。 让我知道是否需要任何更多的信息。

编辑:

下面是SimpleFormGroup类的定义:

public class SimpleFormGroup
{
    public int LastUpdate;

    public string Identifier;

    public string Title;

    public int DisplayOrder;
}

这里是我发送数据:

Content-Type: 'application/json'

{ "DisplayOrder" : "20 }

谢谢,皮特

Answer 1:

有趣的是,它看起来像Delta<T>与诠释成员JSON不起作用。

不幸的是, Delta<T>是为OData的专门创建。 如果Delta<T>似乎比其他的OData任何格式来工作,这是一个巧合,而不是有意的。

好消息是,虽然没有什么来自定义JSON自己的补丁格式阻止你的,我会是如果没有人已经写了一个与Json.NET工作得更好惊讶。 这是可能的,我们将在以后的Web API的发布重温修补,并尝试拿出跨格式化工作一致的故事。



Answer 2:

由于优素福调查,发现事情为什么不工作。 希望能够得到解决的路线。

我管理钻研的ODATA包源之后在结束这种裂纹自己。 我选择了实现另一个MediaTypeFormatter它包装起来的逻辑,因为它提供方便蒂奥HttpContent,但也有其他的方式来实现这一目标。

关键的部分就是如何解释代码第一种模式,请参阅下面的注释行:

public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
    var builder = new ODataConventionModelBuilder();

    // This line will allow you to interpret all the metadata from your code first model
    builder.EntitySet<EfContext>("EfContext");

    var model = builder.GetEdmModel();
    var odataFormatters = ODataMediaTypeFormatters.Create(model);
    var delta = content.ReadAsAsync(type, odataFormatters).Result; 

    var tcs = new TaskCompletionSource<object>(); 
    tcs.SetResult(delta); 
    return tcs.Task; 
}

希望这样可以节省别人有些麻烦!



文章来源: How to use Delta from Microsoft ASP.NET Web API OData with Code First\\JsonMediaTypeFormatter