【发布时间】:2016-05-03 20:10:29
【问题描述】:
我们有一个从模型生成的 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 路由:
// 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 时,文件本身被放入 AWS。在到达这条路线的情况下,我们正在制作一个新的Pdf,我们想要制作一个将上传到 AWS 的新 PDF。为了做到这一点,我们想要将额外的参数传递给模型中不存在的路由。像这样的:
// POST: api/Pdfs
[ResponseType(typeof(Pdf))]
public async Task<IHttpActionResult> PostPdf(Pdf pdf, double heightInches, double widthInches)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// Make a blank PDF based on the dimensions provided
MemoryStream newBlankPdfMemoryStream = PdfOperations.ITextSharpNewBlankPdf(8.5, 11);
pdf.Url = await AWS.S3PubliclyAccessibleInsert("paragonpdfimages", pdf.Job_ID + "/" + pdf.Name, newBlankPdfMemoryStream);
db.JobFiles.Add(pdf);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = pdf.ID }, pdf);
}
但是,将此正文传递给 POST 路由:
{pdf: {Job_Id: 395, Name: "fds"}, widthInches: 8.5, heightInches: 11}
导致“405 Method Not Allowed”和“请求的资源不支持 http 方法'POST'”正文中的消息。
如何将附加参数传递给 POST 路由?我需要制作自定义路线吗?如果是这样,那会是什么样子?提前致谢。
【问题讨论】:
标签: rest post model-view-controller asp.net-web-api http-status-code-405