我有一个WebAPI服务,使用
读取包含文件数据的帖子数据HttpContext.Request as key value pairs
HttpContext.Current.Request["LoadId"]
现在我正在尝试使用HttpClient
编写和控制台应用程序,但无法使其正常工作
private static bool AddException(string vin, string loadId, string sessionId)
{
var client = new HttpClient
{
BaseAddress = new Uri("url")
};
ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
const string quickCode = "01-01-1";
const string inspectionType = "Loading";
const string inspectorCode = "001";
const string numberOfImages = "1";
const string imageNumber = "1";
const string exceptionType = "Driver";
const string imageType = "exception";
var date = DateTime.Now.ToString();
var content = new MultipartFormDataContent();
var values = new[]
{
new KeyValuePair<string, string>("LoadId", loadId),
new KeyValuePair<string, string>("VIN", vin),
new KeyValuePair<string, string>("SessionId", sessionId),
new KeyValuePair<string, string>("QuickCode", quickCode),
new KeyValuePair<string, string>("strInspectionType", inspectionType),
new KeyValuePair<string, string>("InspectorCode", inspectorCode),
new KeyValuePair<string, string>("NoOfImages", numberOfImages),
new KeyValuePair<string, string>("Imageno", imageNumber),
new KeyValuePair<string, string>("strExceptionType", exceptionType),
new KeyValuePair<string, string>("ImageType", imageType),
new KeyValuePair<string, string>("DateTimeOffset", date)
};
var fileContent = new ByteArrayContent(File.ReadAllBytes(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Desert.jpg"
};
content.Add(fileContent, "file", "11");
foreach (var keyValuePair in values)
{
content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
}
var response = client.PostAsync("Exception/AddException", content).Result;
var exceptionResult = response.Content.ReadAsAsync<bool>().Result;
return exceptionResult;
}
以上是代码。但无法从服务中读取代码
我无法控制服务代码而无法更改
答案 0 :(得分:0)
您是否在Post form data along with files to Web Api2处尝试此代码?您可以合并两个代码块。它对我来说非常好。
Web Api代码读取文件
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);
}
}
}
Web Api Code读取表单数据
public async Task<HttpResponseMessage> PostFormData()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
await Request.Content.ReadAsMultipartAsync(provider);
// Show all the key-value pairs.
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
Trace.WriteLine(string.Format("{0}: {1}", key, val));
}
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}