API中的可选参数

时间:2017-07-17 16:42:07

标签: asp.net-mvc web-services api parameters optional-parameters

我在使用C#的MVC中运行API控制器,我想在Xamarin中的应用程序中使用此Web服务...

在我的控制器的GET方法中,我需要捕获参数ROL或参数Patent ....或者将两者结合在一起

我只和2个参数一起工作!!进入ROL和专利带给我相应的市政专利...

我想要的是让用户输入1(ROL或专利)或2个参数(角色和专利)并且工作相同

我已经尝试过,如果......而且我没有成功 对我有什么帮助吗?

When I consult 2 parameters When I consult 1 parameters (ROL o Patente)

  // GET: api/PatenteMunicipalsAPI/ROL/Patente
        [ResponseType(typeof(PatenteMunicipal))]
        public IHttpActionResult GetPatenteMunicipal(string id, string param2)
        {

            var patenteMunicipal = db.PatenteMunicipals.ToList().
                Where(u => u.ROL == id && u.Patente == param2).
                FirstOrDefault();                    

            return Ok(patenteMunicipal);
        }

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式完成此操作。第一种方法是利用Linq实际执行的事实,直到您尝试访问结果(例如ToList(),FirstOrDefault()等),这样您就可以按如下方式构建查询。

//Make sure we have at least one parameter so we don't return all table rows
if(string.IsNullOrEmpty(id) && string.IsNullOrEmpty(param2))
    throw new ArgumentNullException("At least one parameter must be provided");

//Create the base query but don't execute
var query = from pm in Db.PatenteMunicipals select pm;

//Add the where clause for id if provided
if(!string.IsNullOrEmpty(id)
      query = query.Where(x => x.ROL == id);

//Add the where clause for param2 is provided
if(!string.IsNullOrEmpty(param2)
      query = query.Where(x => x.Patente == param2);

//Now force the query to execute and return results
var result = query.FirstOrDefault();
return Ok(result);

另一种选择,如果您的要求变得更复杂,那就是使用System.Linq.Dynamic,它可以作为Nuget包使用,它允许您将where子句创建为字符串。然后,您可以在执行linq语句之前在代码中构建where子句字符串,但这可能对您所需的内容有些过分。

希望有所帮助。