【问题标题】:add parameters in Web api route map based on conditions根据条件在 Web api route map 中添加参数
【发布时间】:2018-02-19 07:28:30
【问题描述】:

在我的应用程序中有 4 个下拉菜单(family、class、series、Fusebody)和一个搜索按钮。我必须根据这些下拉列表的选择来搜索产品表。可以使用 4 个或多个下拉列表中的任何一个下拉值来完成此搜索。像下面我已经尝试过。

示例:从一个下拉列表中选择

[Route("api/KendoCascading/GetclRes/{cres}")]
    public HttpResponseMessage GetclRes(string cres)
    {
        using (CrossReferenceTool1Entities cp = new CrossReferenceTool1Entities())
        {
            var query = (from u in cp.Products where (u.PrivateOnly == false && u.SelectionTool == true && u.ProductTypeID == 2 && (u.ProductFamilyID == 11 || u.ProductFamilyID == 12 || u.ProductFamilyID == 58 || u.ProductFamilyID == 59 || u.ProductFamilyID == 92) && u.Class.Contains(cres)) select u).Distinct().ToList();
            HttpResponseMessage res;
            res = Request.CreateResponse(HttpStatusCode.OK, query);
            return res;
        }
    }

示例:两种不同的下拉选择

[Route("api/KendoCascading/GetresClsbyFam/{cres}/{family}")]
    public HttpResponseMessage GetresClsbyFam(string cres,int family)
    {
        var query = (from u in ep.Products where (u.PrivateOnly == false && u.SelectionTool == true && u.ProductTypeID == 2 && (u.ProductFamilyID == 11 || u.ProductFamilyID == 12 || u.ProductFamilyID == 58 || u.ProductFamilyID == 59 || u.ProductFamilyID == 92) && u.Class.Contains(cres) && u.ProductFMSFamiliesID==family) select u).ToList();
        HttpResponseMessage res;
        res = Request.CreateResponse(HttpStatusCode.OK, query);
        return res;
    }

示例:三个下拉列表选择

[Route("api/KendoCascading/Getfaclapp/{family}/{cres}/{apRes}")]
    public HttpResponseMessage Getfaclapp(int family, string cres, string apRes)
    {
        using (CrossReferenceTool1Entities al = new CrossReferenceTool1Entities())
        {
            var query = (from u in al.Products where (u.PrivateOnly == false && u.SelectionTool == true && u.ProductTypeID == 2 && (u.ProductFamilyID == 11 || u.ProductFamilyID == 12 || u.ProductFamilyID == 58 || u.ProductFamilyID == 59 || u.ProductFamilyID == 92) && u.Class.Contains(cres) && u.ProductFMSFamiliesID==family && al.ProductApplications.Any(d=>d.ProductCode.Contains(u.ProductCode) && d.ProductApplicationName.Contains(apRes))) select u).ToList();
            HttpResponseMessage res;
            res = Request.CreateResponse(HttpStatusCode.OK, query);
            return res;
        }
    }

到目前为止,我已经路由了 api 方法。但是有很多组合可以路由。如果可以根据以下条件添加参数:

[Route("api/KendoCascading/GetResultByAll/{family}/{cres}/{apps}/{seID}")]
public HttpResponseMessage GetResultByAll(int family,string cres,string apps, int seID)
{
 if(family==0)
  {
   result=query1;
  }
    if(family==0 && cres==null)
{

    result=query2;
    }
        }

这样。我已经尝试过,但在 web api route 中显示错误。它不采用任何空值。该怎么做?

【问题讨论】:

    标签: asp.net asp.net-web-api


    【解决方案1】:

    试试这个:

    [Route("api/KendoCascading/GetResultByAll")]
    public HttpResponseMessage GetResultByAll(int? family = null,string cres = null,string apps = null, int? seID = null)
    

    并像这样使用 URL:

    api/KendoCascading/GetResultByAll?family=1&cres=someCres

    它应该可以解决问题

    【讨论】:

    • 非常感谢阁楼。我还有一个问题。如何在角度服务中调用该路线图?假设参数是(family=1,cres=null,seID=1)。你能帮我做一点吗?这对我很有帮助
    • 只需将family和seID添加到查询参数并忽略空值(它们会自动设置为空值)
    • @user7411584 这里你有角度查询参数的答案:stackoverflow.com/questions/13760070/…
    • 谢谢它工作正常。但是,如果任何方法都有更多参数。然后很多如果需要条件。是否有任何流程可以使用更少的 if else 条件?如果有更好的方法,请告诉我。感谢您的热心帮助。
    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2021-05-31
    • 2023-02-10
    • 2020-09-05
    • 2023-01-28
    • 2021-12-30
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多