由于Microsoft Web API不是MVC,因此您无法执行以下操作:
var a = Request.MapPath("~");
Run Code Online (Sandbox Code Playgroud)
也不是这个
var b = Server.MapPath("~");
Run Code Online (Sandbox Code Playgroud)
因为它们在System.Web命名空间下,而不是System.Web.Http命名空间.
那么如何计算Web API中的相对服务器路径?
我曾经在MVC中做过类似的事情:
var myFile = Request.MapPath("~/Content/pics/" + filename);
Run Code Online (Sandbox Code Playgroud)
哪个会给我磁盘上的绝对路径:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
Run Code Online (Sandbox Code Playgroud) 有什么区别Server.MapPath()和HostingEnvironment.MapPath()?是否Server.MapPath()有任何优势了HostingEnvironment.MapPath()?
我原来的问题是当服务器上的文件路径HttpContext不存在时映射,我无法将Server变量传递Global.asax给我的方法.
我用HostingEnvironment.MapPath()它代替,因为它不需要HttpContext.有这两种方法会产生不同结果的情况吗?
我正在尝试接受来自客户端(iOS应用程序)的帖子,我的代码仍然无法读取流.说消息不完整.我一直试图让这个工作好几个小时似乎我的消息格式有些不对劲.我所要做的就是读取一个字符串,但我正在处理iOS开发人员的开发人员只知道如何发送multipart/form-data而不是content-type json.
这是确切的错误:
MIME多部分流的意外结束.MIME多部分邮件不完整."
它失败了: await Request.Content.ReadAsMultipartAsync(provider);
头:
POST http://localhost:8603/api/login HTTP/1.1
Host: localhost:8603
Accept-Encoding: gzip,deflate
Content-Type: multipart/form-data; boundary=------------nx-oauth216807
Content-Length: 364
Accept-Language: en-us
Accept: */*
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
身体:
--------------nx-oauth216807
Content-Disposition: form-data; name="token"
CAAH5su8bZC1IBAC3Qk4aztKzisZCd2Muc3no4BqVUycnZAFSKuleRU7V9uZCbc8DZCedYQTIFKwJbVZCANJCs4ZCZA654PgA22Nei9KiIMLsGbZBaNQugouuLNafNqIOTs9wDvD61ZA6WSTd73AVtFp9tQ1PmFGz601apUGHSimYZCjLfGBo40EBQ5z6eSMNiFeSylym1pK4PCvI17fXCmOcRix4cs96EBl8ZA1opGKVuWizOsS0WZCMiVGvT
--------------nx-oauth216807--
Run Code Online (Sandbox Code Playgroud)
这是WebAPI代码:
public async Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
try
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how …Run Code Online (Sandbox Code Playgroud) 我有一个POST ASP.Net Web Api方法,它改编自ASP.NET Web API RTM中的异步文件上传指南.
我遇到了故障任务问题,在第一个请求被触发并完成后触发了所有请求.
这是一个场景:我有一个示例页面,它将文件和其他参数一起发布到Web API Post方法.它第一次工作正常,文件上传.但是,所有后续请求都会在故障状态下结束任务.我得到"MIME多部分流的意外结束.MIME多部分消息不完整."任何想法为什么?
下面粘贴的是我的Post方法的源代码,示例html表单和Aggregate Exception.
public Task<HttpResponseMessage> Post([FromUri]string memberNumber)
{
// 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);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception));
}
return Request.CreateResponse(HttpStatusCode.OK, new MyModel());
});
return task;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的示例表单来触发此web api: …
.net asp.net file-upload multipartform-data task-parallel-library