android 文件上传并改造到 asp.net 网络 api

android file upload with retrofit to asp.net web api

我正在尝试使用图片和字符串参数上传文件,文件上传成功,但字符串参数始终为空。别人可以帮我吗?提前致谢!

//Retrofit Interface
@Multipart
@POST("account/imageupload")
Call<ResponseBody> uploadProfilePicture(@Part MultipartBody.Part file, 
@Part("userid") RequestBody userid);

//Activity
ApiClient apiClient = new ApiClient(token.getAccessToken(), "multipart/form-data");
            ApiInterface apiService = apiClient.getClient().create(ApiInterface.class);

            File file = new File(selectedImagePath);
            RequestBody reqFile = RequestBody.create(MediaType.parse(getContentResolver().getType(selectedImageUri)), file);
            MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), reqFile);

            RequestBody user = RequestBody.create(MultipartBody.FORM, token.getUserId());

            Call<ResponseBody> call = apiService.uploadProfilePicture(body, user);
            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    int statusCode = response.code();
                }

                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    String message = t.getMessage();
                }
            });

    //Web API (C# web api)
    [Route("imageupload")]
    [HttpPost]
    public async Task<IHttpActionResult> UploadProfilePicture([FromBody] 
    Models.ProfilePhotoUpload photo)
    {
        WriteImage(photo.file);            
        return Ok();
    }

    //Api Controller Model
    public class ProfilePhotoUpload
    {
        string userid { get; set; }
        public HttpFile file { get; set; }
    }

问题是文件上传正确,但userid参数始终为null。

您正在为文本创建不正确的 RequestBody

试试这个:

  RequestBody user = RequestBody.create(MediaType.parse("text/plain"), token.getUserId());