当前位置: 首页 > 知识库问答 >
问题:

如何绑定一个参数的行动asp.netwebapi?

欧阳乐生
2023-03-14

我是asp的新手。NETWebAPI,在asp。net web api,我如何让它为操作自动绑定多个参数,如下所示。

public class DemoController : ApiController
{
    public class DemoModel
    {
        public string X { get; set; }

        public string Y { get; set; }

        public int Z {get; set;}
    }

    [HttpPost]
    public DemoModel GetParameter(string x,string y,int z)
    {
        return new DemoModel(){X = x, Y=y, Z=z};
    }
}

在一个html页面中,我使用jQueryAjax将数据发布到api,得到了一个404ERORR
我只是更改了默认路线
默认值:

api/{controller}/{id}  

改变:

api/{controller}/{action}/{id}

共有2个答案

蒙麒
2023-03-14

首先,您应该将参数包装到某种DTO(数据转换对象)模型中,然后将其转换为DemoModel,而不是调用

return new DemoModel() {X = x, Y = y, Z = z}

您可以将操作的签名更改为以下内容:

[HttpPost]
public IHttpActionResult GetParameter(DemoModelDto model)
{
    if (ModelState.Valid)
    {
        var demoModel = DemoModel.FromDto(model);
        var url = Url.Route("{DefaultApi}", new {controller = "MyController", action = "MyAction", id = yourIdIfYouAreGeneratingIt});

        return Created(url, model);
    }

    return BadRequest(ModelState);
}

这里将要发生的是,ModelBinder将接受请求并提取x、y和z,然后为您创建一个DemoModelDTO,您可以使用它来创建您的DemoModel。返回结果将取决于ModelState是否有效。如果是,则将返回Created,即HTTP状态代码200,表示OK(或201,表示Created),或者如果ModelState无效,则将返回BadRequest,即400。

除此之外,如果要将X、Y和Z作为URL参数发送,则需要发出如下请求:

POST http://localhost/Demo?x=1&y=2&z=3

使用当前实现或上面的实现都将导致将值传递给Web API。

司空炯
2023-03-14

如果希望能够传递动态参数,而不在Action方法上显式指定它们,则将Action参数设置为无参数,然后在客户端上使用参数作为查询字符串值进行调用
然后您可以使用如下内容检索QS值:

 var queryVals = Request.RequestUri.ParseQueryString();    
 var x = queryVals["x"];
 var y = queryVals["y"];
 var z = queryVals["z"];
 类似资料:
  • 问题内容: 我一直在学习对SQL查询使用预处理语句和绑定语句,到目前为止,我已经做到了这一点,它可以正常工作,但是当涉及多个参数或不需要参数时,它根本不是动态的, 这就是我所谓的对象类, 有时我不需要传递任何参数, 有时我只需要一个参数, 有时我只需要多个参数, 因此,我认为对于上述动态任务来说,这条线不够动态, 为了动态地构建bind_param,我在其他在线帖子中找到了这个。 我试图从php.

  • 每次点击都要获取最新的goodsId,当前这个写法只能获取初始的goodsId: 100,自定义指令无法获取到goodsId的最新值。 尝试过的方法: 1、在updated内再一次获取最新值,但是每次点击,事件会触发多次。 2、在vnode上获取最新值,同样无法获取到最新值。 在此想请教一下各位

  • 参数绑定是把当前请求的变量作为操作方法(也包括架构方法)的参数直接传入,参数绑定并不区分请求类型。 参数绑定传入的值会经过全局过滤,如果你有额外的过滤需求可以在操作方法中单独处理。 按名称绑定 参数绑定方式默认是按照变量名进行绑定,例如,我们给Blog控制器定义了两个操作方法read和archive方法,由于read操作需要指定一个id参数,archive方法需要指定年份(year)和月份(mon

  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 6年前关闭。 我有一个mysql查询,但无法为其绑定参数 我已经试过了 但我收到了并且出错了: 警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不

  • 问题内容: 我有一个功能可以做到这一点: 哪个发送到我的数据库类,它执行以下操作: 问题是这不起作用。 我希望做的是获取列表,并在后面列出它们,以使查询类似于: 但是很明显,我走错了路。 有没有办法使数组…按原样转换为要在查询阶段打印出来的列表? 问题答案: call_user_func_array “使用参数数组调用回调” 应该做的工作 更新 :您还必须更改您的params数组: 如预期的那样,

  • 设为我的自定义类型(请注意,没有setters,因为这是一个不可变的值对象): 和我的控制器: 和我的jsp视图表单: 考虑到此视图将发送两个POST参数和,我需要做什么才能让这两个参数与单个对象,假设它将被Spring验证为非空值? 我可以通过自定义WebDataBinder、InitBinder、注册格式化程序或自定义编辑器等来实现这一点吗? 非常感谢你的帮助。 编辑:以下是我在google上