Asp.net web api HttpRequestMessage SetContext方法的替代方法

Asp.net web api HttpRequestMessage SetContext方法的替代方法,asp.net-web-api,odata,Asp.net Web Api,Odata,我从codeplex得到了这个代码 private async Task ExecuteChangeSet( ChangeSetRequestItem changeSet, IList<ODataBatchResponseItem> responses, CancellationToken cancellation) { ChangeSetResponseItem changeSetResponse;

我从codeplex得到了这个代码

private async Task ExecuteChangeSet(
        ChangeSetRequestItem changeSet,
        IList<ODataBatchResponseItem> responses,
        CancellationToken cancellation)
{
        ChangeSetResponseItem changeSetResponse;

        // Create a new ShoppingContext instance, associate it with each of the requests, start a new
        // transaction, execute the changeset and then commit or rollback the transaction depending on
        // whether the responses were all successful or not.
        using (ShoppingContext context = new ShoppingContext())
        {
            foreach (HttpRequestMessage request in changeSet.Requests)
            {
                request.SetContext(context);
            }
专用异步任务ExecuteChangeSet(
ChangeSetRequestItem变更集,
国际劳工组织的答复,
取消(令牌取消)
{
ChangeSetResponseItem changeSetResponse;
//创建一个新的ShoppingContext实例,将其与每个请求关联,启动一个新的
//事务,执行变更集,然后根据
//无论回答是否都成功。
使用(ShoppingContext=new ShoppingContext())
{
foreach(changeSet.Requests中的HttpRequestMessage请求)
{
SetContext(context);
}
可以找到完整的示例代码。 我下载了这个项目,它使用的是.NETFramework 4.5 但是在.NETFramework4.6.1中,SetContext方法不再存在 我想知道如何在框架版本4.6.1中实现同样的功能?
我基本上是在创建一个OData V3服务,该服务将托管在IIS中。

您可以创建自己的功能来设置上下文,并在需要时检索它,使用HttpRequestMessage扩展,如:

示例类:

public static class HttpRequestMessageExtensions
{
     private const string Context = "ShoppingContext";
     public static void SetContext(this HttpRequestMessage request, ShoppingContext context)
    {
        request.Properties[Context] = context;
    }

    public static ShoppingContext GetContext(this HttpRequestMessage request)
    {
        object context;
        if (request.Properties.TryGetValue(Context, out context))
        {
            return (ShoppingContext) context;
        }
        return null;
    }
}
用法:

//Setting context
request.SetContext(context);
//reading context
var context = request.GetContext();

我实际上有那个代码,因为它是示例代码的一部分。我实际上想知道它的用法。我想我不明白?你提到的用法实际上与我上面发布的代码相同。你能详细说明你的答案吗?好的,实际上是我的错,我在扩展类中有不同的名称空间。另一个批处理类有iPOSSe扩展名空间,而扩展名有iPOSServiceV3.Extensions名空间。更正名称空间后,现在一切正常。事实上,看到这一点,我觉得我的代码应该可以工作。