我有2個環境,直到今天我還以爲是完全一樣的。 (沙盒&生產)HttpPostedFileBase null在生產環境中,但沒有測試環境
我有一個移動設備,發佈文件到服務器。這在沙盒環境中工作正常,但是當我在生產環境中運行同樣的東西時,該文件爲空。我已經檢查了web.config並且在兩種環境中都設置了<httpRuntime requestValidationMode="2.0" maxRequestLength="264768888" />
。我在這裏錯過了什麼?有什麼不同?這可能是在IIS中的一些設置?代碼如下:
我正在測試的文件是64k。
服務器代碼
[HttpPost, Url("v3/organizations/{organizationId?}/SyncVideo/")]
public virtual void SyncVideo(HttpPostedFileBase file, Guid? organizationId) {
if (file == null)
throw new HttpBadRequestException("file is missing");
if (organizationId.IsNull()) throw new HttpNotFoundExecption();
if (organizationId != RESTContext.OrganizationId) throw new HttpNotAuthorizedException();
var basePath = RESTContext.Config.VideoPath;
//using (new Impersonator(RESTContext.Config.VideoPathUsername, RESTContext.Config.VideoPathDomain,
// RESTContext.Config.VideoPathPassword)) {
// if (!Directory.Exists(basePath))
// Directory.CreateDirectory(basePath);
// file.SaveAs(basePath + @"\" + file.FileName);
//}
}
客戶端代碼
public void UploadFile(string url, string path) {
Stream stream = null;
HttpClient client = null;
MultipartFormDataContent content = null;
StreamContent streamContent = null;
try {
stream = Platform.FileSystem.ReadStreamFromFile(path);
Platform.Console.WriteLine(stream.Length.ToString());
client = new HttpClient();
content = new MultipartFormDataContent();
foreach (var header in headers)
client.DefaultRequestHeaders.Add(header.Key, header.Value);
streamContent = new StreamContent(stream);
content.Add(streamContent, "file", Path.GetFileName(path));
var message = client.PostAsync(url, content).Result;
if (message.StatusCode != HttpStatusCode.OK) {
Platform.Console.WriteLine(message.ToString());
throw new Exception(message.ToString());
}
} finally {
content.NullSafeDispose();
client.NullSafeDispose();
stream.NullSafeDispose();
streamContent.NullSafeDispose();
}
}
您的web.config是不同的機器?你的表單呈現的HTML怎麼樣? – Dai
@Dai web.configs是99%相同減去一些連接字符串和應用程序設置。我沒有使用HTML來發布文件,這是一個移動設備直接通過API調用。 –
嗯,請驗證來自客戶端的請求中的「Content-Type」是否正確。 – Dai