6

I use this controller:

 public class uploadphotosController : ApiController { public Task<HttpResponseMessage> Post( ) { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root =HostingEnvironment.MapPath("~/photos");//Burdaki app data klasoru degisecek var provider = new MultipartFormDataStreamProvider(root); // Read the form data and return an async task. var task = Request.Content.ReadAsMultipartAsync(provider). ContinueWith<HttpResponseMessage>(t => { if (t.IsFaulted || t.IsCanceled) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); } // This illustrates how to get the file names. foreach (MultipartFileData file in provider.FileData) { string fileName = file.LocalFileName; string originalName = file.Headers.ContentDisposition.FileName; FileInfo file2 = new FileInfo(fileName); file2.CopyTo(Path.Combine(root, originalName.TrimStart('"').TrimEnd('"')), true); file2.Delete(); //Trace.WriteLine(file.Headers.ContentDisposition.FileName); // Trace.WriteLine("Server file path: " + file.LocalFileName); } return Request.CreateResponse(HttpStatusCode.OK); }); return task; } } 

And I use this in WebApiConfig.cs

 config.Routes.MapHttpRoute( name: "DefaultApi_uploadphotos", routeTemplate: "api/{ext}/uploadphotos/", defaults: new { controller = "uploadphotos" }); 

It works fine, but I need to upload image with send email and password at the same time. Because I want to upload image if a user is exists. In my way everyone uploads photo as a user or not. I want to send image and some parameters like email and passwords to the same web api.

How can I do that?

thanks in advance

4
  • you should be able to use query parameters ?email=email&password=pw and then you should use HTTPS since you're passing passwords in clear text (at least I presume) Commented Dec 15, 2014 at 14:01
  • I cant understand , please give a sample ? Commented Dec 15, 2014 at 14:02
  • your Post can take parameters Post(string email, string pw) then you can access those in your body, post to url with query params like so http://yoursite.com/uploadphotos?email=whatever&pw=b4df00d and the image attachments Commented Dec 15, 2014 at 14:06
  • so public Task<HttpResponseMessage> Post( ) should be Post(String email,String password) ? Commented Dec 15, 2014 at 14:08

1 Answer 1

3

What worked for me:

public async Task<HttpResponseMessage> PostFile(string a, string b) { var requestStream = await Request.Content.ReadAsStreamAsync(); ... } 

Routing:

config.Routes.MapHttpRoute( name: "ControllerApi", routeTemplate: "/{controller}/{a}/{b}" ); 

Sending file:

var request = (HttpWebRequest) HttpWebRequest.Create("http://host/controller/hello/world"); request.Method = "POST"; var stream = request.GetRequestStream(); var docFile = File.OpenRead(sourceFile); docFile.CopyTo(stream); docFile.Close(); stream.Close(); var response = request.GetResponse(); 
Sign up to request clarification or add additional context in comments.

8 Comments

what is var requestStream ? how can I reach parameters in web api side
It should be Task<HttpResponseMessage> PostFile(...) or I can be Task<HttpResponseMessage> Post(...) ?
I try it and It gives this error 404 not found (conn.getResponseMessage())
"hello" will be stored in string a and "world" will be stored in string b. You can just use Post or PostXY. requestStream is the Stream of your file.
regarding 404: did you set the right value for host/controller ?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.