ServiceStack - 如何在POST方法中强制执行文件上载

时间:2017-09-10 00:48:07

标签: c# http servicestack multipartform-data

我的服务有POST方法上传图片文件。我正在使用multipart / form-data请求并访问Service类的Request.Files文件,因为它在文档中是推荐的。

public class ImageManagement: Service
{
    public void Post(DetectionImageRequest imageRequest) 
    {
        if (this.Request.Files.Length == 0)
            throw HttpError.NotFound("File parameter is missing");

        // ...
    }
}

我的问题是,如果Http请求中缺少文件,似乎ServiceStack在我的ImageManagement类中与Post方法匹配没有任何问题。如果我的Http请求的DetectionImageRequest部分丢失,ServiceStack肯定会报告错误。

此外,作为http请求的参数的文件在元数据页面中不可见,因此其他用户不知道该文件需要上传。如果上传了文件,我在Post方法中添加了检查,如果不是,则抛出异常,但如果文档甚至没有提及文件作为要求,那么看起来有点愚蠢抛出异常。

有没有办法让文件成为必需参数?此外,是否可以将文件记录为元数据页面中的参数,以便用户知道它存在?

1 个答案:

答案 0 :(得分:1)

HTTP上传的文件不是DTO服务合同的一部分,它们是通过multipart/form-data Content-Type上传的,因此没有可以注释的属性使其成为必填字段。

您可以使用[Api][Description]属性中的说明字段来使用文字说明来告知API使用者服务接受文件。我还建议对接受文件的服务使用命名约定,例如:让它们以Upload*前缀开头。