Asp.net web api HttpRequestMessage SetContext方法的替代方法
我从codeplex得到了这个代码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;
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名空间。更正名称空间后,现在一切正常。事实上,看到这一点,我觉得我的代码应该可以工作。