長い話を短くパラメータとして列挙子を使用して - 私はEnum
typeプロパティを受け入れるEntity Framework
モデルを持っている:FileExtensions属性 -
public class FileUploads {
public AllowedFileTypes FileType { get; set; }
}
列挙型は次のとおりです。
public enum AllowedFileTypes {
jpg,
png,
gif,
jpeg,
bmp,
}
その後、Web API
コントローラIにの検証属性を次のように設定します。
[HttpPost]
public async Task<IActionResult> Upload(
[Required]
[FileExtensions(Extensions = "jpg,png,gif,jpeg,bmp")] // allowed filetypes
IFormFile file)
{
return Ok()
}
このメソッドは、ファイルをアップロードするために使用されます。今、問題は私が基本的にFileExtensions
属性が手動で許されるフォーマットを設定しているということです。これは、新しいファイル形式が将来enumに追加されるたびに、各FileExtensions
属性を手動で更新する必要があることを意味します。これは簡単に忘れてしまったり、他の開発者がこの事実を認識できない可能性があります。属性にEnum
型パラメータを渡すことが可能かどうか、考えていましたか?
[FileExtensions(Extensions = string.Join(",", Enum.GetValues(typeof(FileExtensions))))]
は残念ながら、Extensions
パラメータは、したがって、エラーがVS
によってスローされconst
文字列型でなければなりません:
私の試みは以下の通りでした。
FileExtensions fileExtension;
bool fileExtensionParseResult = Enum.TryParse<FileExtensions>(Path.GetExtension(file.FileName), true, out fileExtension);
他のアイデア:私はもちろん、このような属性の私自身のカスタム検証を書き込むことができますか?
@Alexご質問がある場合は、ご確認ください。 – Rogala
返事ありがとうございます。チャンクファイルのアップロードに関しては、複数のファイルのアップロードにも 'IForm'タイプを使うことができると思います。 'List'に変更して、 'multipart/form-data'形式のフォームを使って提出してください...私の問題については、あなたの答えは、許可されたフォーマットを保存する方法に関する質問に部分的に答えていると思います。これらの値を使用する検証属性 'FileExtensions'をどのように変更するのかという質問に答えてください..あなたのアプリケーションではどこで検証を実行しますか?バリデーション属性、別のバリデータークラス、またはif/elsesを使用したコントローラーアクションで直接ですか? –
Alex
私は、検証を一元化し、検証クラスに配置したいと思う傾向があります。 FluentValidationは非常に強力なフレームワークです:http://fluentvalidation.codeplex.com/ – Rogala