Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 在WebAPI中定义两个get函数_C#_Routing_Asp.net Web Api - Fatal编程技术网

C# 在WebAPI中定义两个get函数

C# 在WebAPI中定义两个get函数,c#,routing,asp.net-web-api,C#,Routing,Asp.net Web Api,当我试图在MVC WebAPI中调用GET函数时,出现以下异常 {"$id":"1","Message":"An error has occurred.", "ExceptionMessage":"Multiple actions were found that match the request: \r\nSystem.Xml.XmlNode Get(Int32, System.String) 我认为问题是由两个get函数引起的 我定义了两个功能: One: [HttpGet

当我试图在MVC WebAPI中调用GET函数时,出现以下异常

 {"$id":"1","Message":"An error has occurred.",
 "ExceptionMessage":"Multiple actions were found that match the request: 
 \r\nSystem.Xml.XmlNode Get(Int32, System.String) 
我认为问题是由两个get函数引起的 我定义了两个功能:

One:

   [HttpGet]
   public XmlNode Get(int id, string Tokken)
   {
        //Do something
   }
第二个

 [HttpGet]
 public List<UsersAnswers> GetUsersInteractions(int? activityID, string Tokken)
 {
  // Do Something
 }
现在,当我尝试调用第二个函数时出现异常:

{SiteURL}/api/Activities/GetUsersInteractions?activityID=32&Tokken=r54e54353
正如您所看到的,路由引擎将请求发送到第一个函数,而不是第二个函数


如何定义两个get操作并分别调用每个操作?

您没有调用第二个函数-第二个函数名为
InsertUserRecord
,是一个
POST
方法。通过
GET
调用的函数是
GetUserInteractions
。由于没有用于
GET
的此类函数,引擎可能会将其映射到存在的唯一
GET
函数,但实际上它应该抛出“无此类函数”错误。

您没有调用第二个函数-第二个函数名为
InsertUserRecord
,是一个
POST
方法。通过
GET
调用的函数是
GetUserInteractions
。由于没有用于
GET
的此类函数,引擎可能会将其映射到唯一的
GET
函数,但实际上它应该抛出“no-this function”错误。

对于默认路由模板,Web API使用HTTP方法选择操作。但是,您也可以创建一个路由,其中操作名称包含在URI中:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
在此路由模板中,{action}参数命名控制器上的操作方法。对于这种类型的路由,使用属性指定允许的HTTP方法。例如,假设控制器具有以下方法:

public class ProductsController : ApiController
{
    [HttpGet]
    public string Details(int id);
}
在本例中,对“api/products/details/1”的GET请求将映射到details方法。这种类型的路由类似于ASP.NET MVC,可能适用于RPC类型的API

可以使用ActionName属性覆盖操作名称。在以下示例中,有两个操作映射到“api/products/thumbnail/id”。一个支持GET,另一个支持POST:

public class ProductsController : ApiController
{
    [HttpGet]
    [ActionName("Thumbnail")]
    public HttpResponseMessage GetThumbnailImage(int id);

    [HttpPost]
    [ActionName("Thumbnail")]
    public void AddThumbnailImage(int id);
}

使用默认路由模板,Web API使用HTTP方法选择操作。但是,您也可以创建一个路由,其中操作名称包含在URI中:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
在此路由模板中,{action}参数命名控制器上的操作方法。使用此类型的路由,使用属性指定允许的HTTP方法。例如,假设控制器具有以下方法:

public class ProductsController : ApiController
{
    [HttpGet]
    public string Details(int id);
}
在本例中,对“api/products/details/1”的GET请求将映射到details方法。这种类型的路由类似于ASP.NET MVC,可能适用于RPC类型的api

您可以使用ActionName属性覆盖操作名称。在以下示例中,有两个操作映射到“api/products/thumbnail/id”。一个支持GET,另一个支持POST:

public class ProductsController : ApiController
{
    [HttpGet]
    [ActionName("Thumbnail")]
    public HttpResponseMessage GetThumbnailImage(int id);

    [HttpPost]
    [ActionName("Thumbnail")]
    public void AddThumbnailImage(int id);
}

一个是GET,另一个是POST,不是两个GET。。。你粘贴了错误的代码吗?是的,我错误地粘贴了错误的代码。我已经编辑了这些问题。谢谢发布路由配置。一个是GET,另一个是post,而不是2个GET。。。你粘贴了错误的代码吗?是的,我错误地粘贴了错误的代码。我已经编辑了这些问题。谢谢,请张贴路线配置。但他没有得到“没有这样的功能”。最有可能的是,问题出在其他方面。你过早地发布了你的答案。@DanielHilgarth我写了一个问题的答案——现在情况发生了变化,虽然我的答案现在不再完全正确,但对问题的“第一个版本”是有效的:-),但他没有得到“没有这样的功能”。最有可能的是,问题出在其他方面。你过早地发布了你的答案。@DanielHilgarth我原样写了一个问题的答案-现在情况发生了变化,虽然我的答案现在不再完全正确,但它对“第一个版本”是有效的问题:-)我添加了ActionName属性,但它仍然不工作,它仍然运行相同的异常,它是否正在执行MapHttpRoute?也许可以尝试删除除我们正在讨论的2之外的所有其他操作方法…我已经添加了属性ActionName,但它仍然不起作用它仍然运行相同的异常,它正在执行MapHttpRoute?也许可以尝试删除除我们正在讨论的2之外的所有其他动作方法。。。