首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用RESTier PUT/修补程序

未调用RESTier PUT/修补程序
EN

Stack Overflow用户
提问于 2018-02-09 10:32:47
回答 1查看 122关注 0票数 0

目前,我正在开发一个安装了RESTier 1.0 NuGet软件包的项目。我使用的是带有一些DTO的自定义模型生成器。要构建API,我使用继承自ODataController的控制器。到目前为止,查询或发布数据并不是问题。

当我试图用补丁或PUT请求更新记录时,不调用相应的控制器操作,而是得到异常。

  1. 首先,我确实得到了ChangeSetPreparer缺少的例外。
  2. 更改之后,我确实得到了空引用异常。

因此,为了避免第一种情况,我添加了一个ChangeSetInitializer和一个SubmitExecutor,这是我在Github中找到的(我再也不记得了):

代码语言:javascript
复制
public class ExternalApi : ApiBase
{
    public ExternalApi(IServiceProvider serviceProvider) : base(serviceProvider)
    {
    }

public static new IServiceCollection ConfigureApi(Type apiType, IServiceCollection services)
{
    return ApiBase.ConfigureApi(apiType, services)
    .AddService<IModelBuilder, CustomModelBuilder>()
    .AddService<IChangeSetInitializer, ChangeSetInitializer>()
    .AddService<ISubmitExecutor, SubmitExecutor>();
}

private class ChangeSetInitializer : IChangeSetInitializer
{
    public Task InitializeAsync(SubmitContext context, CancellationToken cancellationToken)
    {
        context.ChangeSet = new ChangeSet();
        return Task.FromResult<object>(null);
    }
}

private class SubmitExecutor : ISubmitExecutor
{
    public Task<SubmitResult> ExecuteSubmitAsync(SubmitContext context, CancellationToken cancellationToken)
    {
        return Task.FromResult(new SubmitResult(context.ChangeSet));
    }
}
}

添加了这些之后,第一个问题似乎已经解决了,但是下面的堆栈跟踪使我得到了空引用异常:

( bei Microsoft.Restier.Publishers.OData.RestierController.CreateResult(Type resultType,对象结果) bei Microsoft.Restier.Publishers.OData.RestierController.CreateUpdatedODataResult(Object实体) bei Microsoft.Restier.Publishers.OData.RestierController.d__3f.MoveNext() - Ende der Stapelüberwachung vom vorhergehenden Ort,一个dem die Ausnahme ausgel st wurde - bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务) bei Microsoft.Restier.Publishers.OData.RestierController.d__20.MoveNext() - Ende der Stapelüberwachung vom vorhergehenden Ort,一个dem die Ausnahme ausgel st wurde - bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务) bei System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext() - Ende der Stapelüberwachung vom vorhergehenden Ort,一个dem die Ausnahme ausgel st wurde - bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务) bei System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() - Ende der Stapelüberwachung vom vorhergehenden Ort,一个dem die Ausnahme ausgel st wurde - bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务) bei System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() - Ende der Stapelüberwachung vom vorhergehenden Ort,dem die Ausnahme ausgel st wurdedem die Ausnahme ausgel st wurdedem die Ausnahme ausgel st wurde

下面是我使用的动作签名的示例:

代码语言:javascript
复制
[EnableQuery]
public IQueryable<StoreDTO> Get()
[EnableQuery]
public SingleResult<StoreDTO> Get([FromODataUri] int key)
public async Task<IHttpActionResult> Post(StoreDTO store)
public async Task<IHttpActionResult> Put([FromODataUri] int key, StoreDTO store)
    public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<StoreDTO> store)

我尝试了各种与DTO匹配的JSON对象,但即使在调用Put或Patch之前,我仍然获得空引用异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 11:24:32

我找到了解决办法,或者至少找到了解决办法。我改变了一下我的WebApiConfig。

而不是:MapRestierRoute(.)我现在使用的Microsoft.Restier.Publishers.OData.HttpConfigurationExtensions :MapODataServiceRoute(.)来自System.Web.OData.Extensions.HttpConfigurationExtensions

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48703844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档