Rest 自定义Web API控制器参数

Rest 自定义Web API控制器参数,rest,post,model-view-controller,asp.net-web-api,http-status-code-405,Rest,Post,Model View Controller,Asp.net Web Api,Http Status Code 405,我们有一个从模型生成的Web API控制器。该模型具有以下形式: public class Pdf { public int ID { get; set; } public string Name { get; set; } public string Url { get; set; } // File stored in AWS public int Job_ID { get; set; } public List<PdfPage> { ge

我们有一个从模型生成的Web API控制器。该模型具有以下形式:

public class Pdf
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Url { get; set; } // File stored in AWS
    public int Job_ID { get; set; }
    public List<PdfPage> { get; set; }
}
但是,将此机构传递到邮政路线:

// POST: api/Pdfs
[ResponseType(typeof(Pdf))]
public async Task<IHttpActionResult> PostPdf(Pdf pdf)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.JobFiles.Add(pdf);
    await db.SaveChangesAsync();

    return CreatedAtRoute("DefaultApi", new { id = pdf.ID }, pdf);
}
{pdf: {Job_Id: 395, Name: "fds"}, widthInches: 8.5, heightInches: 11}
导致“405方法不允许”和“请求的资源不支持http方法‘POST’”正文中的消息


如何将附加参数传递到POST路由?我需要定制路线吗?如果是这样,那会是什么样子?提前感谢。

您遇到的问题是由于默认情况下,Web Api使用URL查询字符串中的值将参数与简单数据类型(如double)绑定。因此,您有两种选择:

  • 告诉Web Api通过修改要修改的操作从主体获取值

    public async Task postdf(Pdf格式,[FromBody]双高英寸,[FromBody]双宽英寸)

  • 在查询字符串而不是正文中传递高度和宽度值

    …/postdf?高英寸=11,宽英寸=8.5


使用第二个选项,我如何访问postdf方法中的值?与您当前的方式完全相同,模型绑定将简单地将查询字符串中的值分配给action方法的ParametersHanks,但我无法使这两个都起作用。仍然有405个错误。对于第二个实例,我是否需要一些用于模型绑定的指令来绑定查询字符串参数?同样,根据这个例子,
[FromBody]
不能在同一路由签名中使用两次。
{pdf: {Job_Id: 395, Name: "fds"}, widthInches: 8.5, heightInches: 11}