c# - httprequestmessage - multipartformdatacontent form new multipartformdatacontent();
Http MultipartFormDataContent (3)
Depuré esto, el problema está aquí:
method.Add(streamContent, "filename");
Este ''Agregar'' en realidad no coloca el archivo en el CUERPO del Contenido Multiparte.
Me han pedido que haga lo siguiente en C #:
/**
* 1. Create a MultipartPostMethod
* 2. Construct the web URL to connect to the SDP Server
* 3. Add the filename to be attached as a parameter to the MultipartPostMethod with parameter name "filename"
* 4. Execute the MultipartPostMethod
* 5. Receive and process the response as required
* /
He escrito un código que no tiene errores, sin embargo, el archivo no está adjunto.
¿Puede alguien echar un vistazo a mi código C # para ver si he escrito el código incorrectamente?
Aquí está mi código:
var client = new HttpClient();
const string weblinkUrl = "http://testserver.com/attach?";
var method = new MultipartFormDataContent();
const string fileName = "C:/file.txt";
var streamContent = new StreamContent(File.Open(fileName, FileMode.Open));
method.Add(streamContent, "filename");
var result = client.PostAsync(weblinkUrl, method);
MessageBox.Show(result.Result.ToString());
Esto se ha pedido varias veces en SO. Aquí hay algunas soluciones posibles:
C # HttpClient 4.5 multipart / upload de datos de formulario: C # HttpClient 4.5 multipart / form-data upload
HttpClient Multipart Form Post en C #: HttpClient Multipart Form Post en C #
En una nota personal, verifique los datos de la publicación que se envían en la solicitud y verifique la respuesta. Fiddler es excelente para esto.
Sé que esta es una publicación anterior. Pero para aquellos que buscan una solución, para proporcionar una respuesta más directa, esto es lo que he encontrado:
using System.Diagnostics;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
public class UploadController : ApiController
{
public async Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}
Aquí es donde lo encontré http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2
Para una implementación más elaborada
http://galratner.com/blogs/net/archive/2013/03/22/using-html-5-and-the-web-api-for-ajax-file-uploads-with-image-preview-and- a-progress-bar.aspx