代码之家  ›  专栏  ›  技术社区  ›  Ankur Rai

OData GET返回406/404时出错,在不同情况下返回多个参数

  •  1
  • Ankur Rai  · 技术社区  · 6 年前

    我一直在尝试使用多个参数执行一个get方法,但有时结果是404,或者如果找到该方法,则结果是406(不可接受)。它正在使用单个参数。

    案例1 :单参数->工作返回字符串

    请求url-

    http://localhost/odata/Monitoring/GetTestingDone(number=1234)

    方法-

            [EnableQuery]
            public IHttpActionResult GetTestingDone(long number)
            {
              string a = Convert.ToString(number);
              return Ok(a);
            }

    在edmx模型中注册-

    builder.EntityType<TestingType>().Collection.Function("GetTestingDone").Returns<string>().Parameter<long>("number");

    案例2 :多个参数-返回404未找到

    请求URL-

    http://localhost/odata/MonitoringAttributes/IsTested(number1=,number2=,number3=13675,value=FederalRegistration)

    方法-

    [EnableQuery]
            public IHttpActionResult IsTested(int? number1, int? number2, int? number3, string value)
            {
                
                    ObjectParameter isTested = new ObjectParameter("isTested", typeof(bool));
    
                    var result = db.vm_getTested(number1, number2, number3, value, isTested)
                        .ToList();
                    bool asd = Convert.ToBoolean(isTested.Value);
                    
                    return Ok(asd);
    
                }

    在edmx模型中注册-

    var IsTested = builder.EntityType<TestingType>()
                    .Collection
                    .Function("IsTested")
                    .Returns<bool>();
    
                IsTested.Parameter<int?>("number1");
                IsTested.Parameter<int?>("number2");
                IsTested.Parameter<int?>("number3");
                IsTested.Parameter<string>("value");
                

    案例3 :输入方法但返回406(不可接受)

    请求的URL-

    http://localhost/odata/MonitoringAttributes/IsTested?number1=&number2=&number3=13675&value=FederalRegistration

    方法-

    [HttpGet]
    [Route("odata/Monitoring/IsTested")]
    EnableQuery]
            public IHttpActionResult IsTested(int? number1, int? number2, int? number3, string value)
            {
                
                    ObjectParameter isTested = new ObjectParameter("isTested", typeof(bool));
    
                    var result = db.vm_getTested(number1, number2, number3, value, isTested)
                        .ToList();
                    bool asd = Convert.ToBoolean(isTested.Value);
                    
                    return Ok(asd);
    
                }

    在edmx模型中注册的与 案例2 .

    那么,我是否遗漏了什么或做得不正确呢。请引导我。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ankur Rai    6 年前

    做了一些研究并找到了方法-

    请求url-

    http://localhost/odata/MonitoringAttributes/Class.IsTested(number1=null,number2=null,number3=13675,value='FederalRegistration')

    所以这里不接受空白值,我们需要传递字符串“null”,并且字符串将用单引号括起来,而不是双引号括起来。

    方法->

    [HttpGet]
    EnableQuery]
            public IHttpActionResult IsTested([FromOdataUrl]int? number1,[FromOdataUrl] int? number2,[FromOdataUrl] int? number3, string value)
            {
                
                    ObjectParameter isTested = new ObjectParameter("isTested", typeof(bool));
    
                    var result = db.vm_getTested(number1, number2, number3, value, isTested)
                        .ToList();
                    bool asd = Convert.ToBoolean(isTested.Value);
                    
                    return Ok(asd);
    
                }

    此处参数的前缀为“[FromOdataUrl]”,仅用于int或long。对于string或bool,它不是必需的。

    在edmx模型中注册的与 案例2