Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# “只有一次事后行动”;找到多个与请求匹配的操作;错误_C#_Asp.net Mvc_Http_Generics_Asp.net Web Api - Fatal编程技术网

C# “只有一次事后行动”;找到多个与请求匹配的操作;错误

C# “只有一次事后行动”;找到多个与请求匹配的操作;错误,c#,asp.net-mvc,http,generics,asp.net-web-api,C#,Asp.net Mvc,Http,Generics,Asp.net Web Api,我有一个从通用基本控制器继承的控制器,两者都有一个POST操作,其中基本控制器的操作是通用的。域实体被设置为泛型基本控制器的类型参数,一些操作可以为泛型基本控制器的泛型方法传递视图模型类型参数(如POST和PUT) 此通用基本控制器继承自常规基本控制器,自定义的ActionFilterAttribute在其上执行一个方法,以设置实体框架的DbContext实例。我不知道后者是否相关,当我删除这个时,问题仍然存在 我定义了一个路由Web API: config.Routes.MapHttpRout

我有一个从通用基本控制器继承的控制器,两者都有一个POST操作,其中基本控制器的操作是通用的。域实体被设置为泛型基本控制器的类型参数,一些操作可以为泛型基本控制器的泛型方法传递视图模型类型参数(如POST和PUT)

此通用基本控制器继承自常规基本控制器,自定义的
ActionFilterAttribute
在其上执行一个方法,以设置
实体框架的
DbContext
实例。我不知道后者是否相关,当我删除这个时,问题仍然存在

我定义了一个路由Web API:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
现在,当我尝试对从泛型基本控制器继承的每个控制器调用POST操作时,我得到了标题中提到的错误。问题是,对于其他HTTP方法,不会发生错误(例如PUT),例如,当我将通用基本控制器上的POST操作的名称更改为“Add”时,错误仍然存在

这是我调用的控制器(只是相关部分):

不知何故,这被视为一个
HttpPost
,与我前面提到的tables控制器上的POST操作相冲突。我仍然无法理解这个方法(使用
字符串作为param)如何被视为与我的tables控制器上的方法相似。
解决方案是将其标记为
内部
(这样它就不会通过API暴露)


希望这对其他人有所帮助。

不久前我遇到了这个错误:尝试更改一个方法的名称(我知道您尝试过),但同时在它们上面添加[HttpPost,ActionName(“Post”)。@erem我似乎无法在通用控制器上设置该属性。非常感谢!!!你真的救了我一天。我面临着完全相同的问题,这不是明显的行为
public class TablesController : GenericBaseController<Table>
{
    public HttpResponseMessage Post(TablePostModel tableModel)
    {
        return base.Add(tableModel);
    }

    public HttpResponseMessage Put(TablePostModel tableModel)
    {
        return base.Put(tableModel);
    }
}
protected HttpResponseMessage Post<TViewModel>(TViewModel viewModel)
        where TViewModel : BaseModel, new()
    {
        if (viewModel == null)
            throw new ArgumentNullException(
                string.Format("The view model {0} cannot be null", typeof(TViewModel)));

        if (ModelState.IsValid)
        {
            TEntity entity = Mapper<TViewModel, TEntity>.Map(viewModel);

            try
            {
                entity = Uow.GetRepository<TEntity>().Add(entity);
                Uow.Commit();
            }
            catch (ValidationException ex)
            {
                MvcValidationExtension.AddModelErrors(this.ModelState, ex);
                return BadRequestResponse();
            }

            return OkResponse(entity);
        }

        return BadRequestResponse();

    }

protected HttpResponseMessage Put<TViewModel>(TViewModel viewModel)
        where TViewModel : BaseModel, new()
    {
        if (viewModel == null)
            throw new ArgumentNullException(
                string.Format("The view model {0} cannot be null", typeof(TViewModel)));

        if (ModelState.IsValid)
        {
            TEntity entity = Uow.GetRepository<TEntity>().GetById(viewModel.RowId);
            entity = ValueMapper<TViewModel, TEntity>.Map(viewModel, entity);

            try
            {
                entity = Uow.GetRepository<TEntity>().Update(entity);
                Uow.Commit();
            }
            catch (ValidationException ex)
            {
                MvcValidationExtension.AddModelErrors(this.ModelState, ex);
                return BadRequestResponse();
            }

            return OkResponse(entity);
        }

        return BadRequestResponse();
    }
public void InitializeUnitOfWork(string connectionName = "")