在不同情况下,OData GET中的错误返回406/404,其中包含多个参数

时间:2018-02-06 04:27:22

标签: c# asp.net-mvc entity-framework get odata

我一直在尝试使用多个参数执行get方法,但有时候结果是404,否则如果它找到方法然后406(Not Acceptable)。它正在使用单一参数。

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

请求网址 -



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");
&#13;
&#13;
&#13;

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

请求网址 -

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

方法 -

&#13;
&#13;
[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);

            }
&#13;
&#13;
&#13;

在edmx模型中注册 -

&#13;
&#13;
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");
            
&#13;
&#13;
&#13;

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

请求的网址 -

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

方法 -

&#13;
&#13;
[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);

            }
&#13;
&#13;
&#13;

在edmx模型中注册与 CASE 2 相同。

所以我错过了什么或做错了。请指导我。

1 个答案:

答案 0 :(得分:0)

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

请求网址 -

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

所以这里没有接受空值我们需要传递字符串“null”,字符串将是单引号而不是双引号。

方法 - &gt;

[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);

            }

这里param的前缀为“[FromOdataUrl]”仅适用于int或long。对于字符串或bool,不需要。

在edmx模型中注册与 CASE2

相同