Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# OData v4'中的字母数字字符串;s函数字符串参数被解析为int到string或null_C#_Asp.net Web Api_Odata_Odata V4 - Fatal编程技术网

C# OData v4'中的字母数字字符串;s函数字符串参数被解析为int到string或null

C# OData v4'中的字母数字字符串;s函数字符串参数被解析为int到string或null,c#,asp.net-web-api,odata,odata-v4,C#,Asp.net Web Api,Odata,Odata V4,我在传递字母数字字符串作为OData函数的参数时遇到一些问题。签名如下: [EnableQuery] public IHttpActionResult GetForConstant([FromODataUri]string constant) 及其配置: var getForConstant = collection.Function("GetForConstant") .ReturnsFromEntitySet<BasicParameter>("Parameter

我在传递字母数字字符串作为OData函数的参数时遇到一些问题。签名如下:

[EnableQuery]
    public IHttpActionResult GetForConstant([FromODataUri]string constant)
及其配置:

var getForConstant = collection.Function("GetForConstant")
    .ReturnsFromEntitySet<BasicParameter>("Parameters");
getForConstant.Parameter<string>("constant");
如果我尝试不使用单引号,我会得到一个406不可接受的错误

我尝试将WebAPI 2.2 for OData更新为最新版本(5.4.0),并将其更新为最新的ODataLib(6.10.0),但没有任何帮助

知道怎么了吗

如果有必要的话,我将WebAPI和MVC(用于帮助页面)混合在一起。以下是我的路由配置

MVC:

WebAPI:

public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute( //MapHTTPRoute for controllers inheriting ApiController
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
        );
    }
小田:

public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        var builder = new ODataConventionModelBuilder() { Namespace = "Default" };

*snip! model configurations here*

        var model = builder.GetEdmModel();
        config.MapODataServiceRoute("ODataRoute", "api", model);
    }

根据这个问题的评论链,路由约定填充函数参数的方式似乎有点奇怪。由于基于属性的路由是第一个运行的路由,使用它似乎可以确保“正确的事情”发生

要进一步缩小问题的范围,需要调试路由约定,以找到针对该场景执行的操作,以及该操作是如何填充路由数据的

因此,同时,将以下属性添加到函数中会起作用:

[ODataRoute("/Parameters/Default.GetForConstant(constant={constant})"]

你能给我们看一下函数的$metadata吗?@Brad我已将元数据添加到问题中。从你所显示的内容来看,一切都正常,但显然由于某种原因,你的字符串在提供给方法之前似乎被解析为数字。您是否使用任何自定义路由约定、模型绑定或类似的东西?除了在某种程度上混合了MVC和WebAPI之外,一切都是尽可能基本的。我已经在问题中添加了路由配置。嗯,WebApi和OData之间的重叠很有趣-我假设OData是先注册的?函数被调用的事实似乎表明这没关系。可以用来调试的是在函数[ODataRoute(“/Parameters/Default.GetForConstants(constant={constant})”上抛出ODataRoute属性看看这是否有帮助。如果有,那肯定是路由问题。我没有ODataRouteAttribute,所以这不起作用。有什么想法吗?显然问题223是用什么OData WebApi版本解决的?
public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute( //MapHTTPRoute for controllers inheriting ApiController
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
        );
    }
public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        var builder = new ODataConventionModelBuilder() { Namespace = "Default" };

*snip! model configurations here*

        var model = builder.GetEdmModel();
        config.MapODataServiceRoute("ODataRoute", "api", model);
    }
[ODataRoute("/Parameters/Default.GetForConstant(constant={constant})"]