0

私は Asp.Net MVC Web API に取り組んでいます。asp.net Web API 経由で html フォームを投稿しようとしています。私のフォームには、テキストボックスなどのコントロールとファイルアップロードコントロールが含まれています

 @using (Html.BeginForm("PostImage", "Home", FormMethod.Post, new { id = "form1", enctype = "multipart/form-data" }))
    {
       <input type="text" id="name" name="name"/>
       <input type="file" id="file" name="file"/>
       <input type="submit" value="upload"/>
     }

私のAPIコントローラーは次のようになります。

[HttpPost]
    public async Task<HttpResponseMessage> PostImage(HttpRequestMessage request)
    {
       try
       {
          string imagename = "";
string name="";
          if (!request.Content.IsMimeMultipartContent("form-data"))
          {
              return request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, new HttpError() { { "status", "failed" }, { "message", "Invalid file format" } });
          }
          else
          {
               string PATH = ConfigurationManager.AppSettings["ImageuploadPath"].ToString();//
               var streamProvider = new CustomMultipartFormDataStreamProvider(PATH);
               await Request.Content.ReadAsMultipartAsync(streamProvider);
               foreach (var file1 in streamProvider.FileData)
               {
                  FileInfo fileInfo = new FileInfo(file1.LocalFileName);
                  imagename = fileInfo.Name;
               }
                name = Convert.ToString(streamProvider.FormData["name"]);
            }
            if (imagename == "")
            {
               imagename = "NOIMAGE";
            }
             //save those two fields   
          }
          catch (Exception ex)
          {
             return request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError() { { "status", "failed" }, { "message", ex.InnerException } });
          }
     }

上記のコードは、画像と名前の両方のフィールド値をコントローラーに送信すると正常に機能します。私のフォームでは、名前フィールドのみが必須ですが、画像フィールドではなく、ユーザーが画像を送信しない場合があります。このような場合、コントローラーはサポートされていないメディア タイプというエラーをスローします。オプションで画像またはフォームデータを送信できる方法はありますか? 画像用とフォームデータ用の 2 つのアクションを記述した場合でも、データを維持するのが非常に難しくなる可能性があり、悪い習慣でもあると思います。私のやり方が間違っていたら、私を導いてください。前もって感謝します。

4

0 に答える 0