Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 具有不同url参数的web api调用get方法_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# 具有不同url参数的web api调用get方法

C# 具有不同url参数的web api调用get方法,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我有一套实现get接口的要求: - api/Item - api/Item?name=test - api/Item?updated=2016-10-12 - etc 我将这些方法定义为: - get() //returns all items - getName([FromUri] string name) - getUpdated([FromUri] string updated) 我的问题是-如果参数不存在(假设调用是api/Item?test=test),那么get(

我有一套实现get接口的要求:

 - api/Item
 - api/Item?name=test
 - api/Item?updated=2016-10-12
 - etc
我将这些方法定义为:

 - get() //returns all items
 - getName([FromUri] string name) 
 - getUpdated([FromUri] string updated)
我的问题是-如果参数不存在(假设调用是
api/Item?test=test
),那么
get(
)方法被称为“test”,因为找不到参数映射


在这种情况下,我需要返回错误响应。是否有其他合适的方法从URL读取参数以满足接口要求?

您可能正在寻找类似的方法

[RoutePrefix("api/items")]
public class ItemsController : ApiController
{

    public IHttpActionResult Get()
    {
        return Ok(new List<string> { "some results collection" });
    }

    [Route("names")]
    public IHttpActionResult GetByName([FromUri]string name = null)
    {
        if (string.IsNullOrWhiteSpace(name))
        {
            return BadRequest("name is empty");
        }
        return Ok("some result");
    }

    [Route("updates")]
    public IHttpActionResult GetUpdates([FromUri]string updated = null)
    {
        if (string.IsNullOrWhiteSpace(updated))
        {
            return BadRequest("updated is empty");
        }
        return Ok("some result");
    }
}
[RoutePrefix(“api/items”)]
公共类项控制器:ApiController
{
public IHttpActionResult Get()
{
返回Ok(新列表{“某些结果集合”});
}
[路线(“名称”)]
公共IHttpActionResult GetByName([FromUri]字符串名称=null)
{
if(string.IsNullOrWhiteSpace(name))
{
返回请求(“名称为空”);
}
返回Ok(“某个结果”);
}
[路线(“更新”)]
公共IHttpActionResult GetUpdate([FromUri]字符串updated=null)
{
if(string.IsNullOrWhiteSpace(已更新))
{
返回请求(“更新为空”);
}
返回Ok(“某个结果”);
}
}
当您调用这些REST端点时,RESTAPI调用将类似于

获取api/items以检索所有项目

GETapi/items/names/john按名称检索,若未提供参数,则返回错误


获取api/items/updated/test以检索更新,如果未提供参数,则返回错误

使用属性路由…或重新考虑路由设计。为什么不使用api/Item/name/test或api/Item/updated/2016-10-12?然后使用一个默认的路线图,后面跟着一个错误的路线图来处理不匹配的路线。谢谢你们指向正确的方向。谢谢你的回复。我稍微修改了方法和路由。方法签名现在是GetByName(string name=null),我已经设置了[Route(“name/{name}”)]属性。它现在允许以api/items/name/john的形式进行调用。这解决了我的问题。谢谢你的样品。