【发布时间】:2021-09-11 23:16:41
【问题描述】:
.Net 框架 4.6.1
我设置了以下代码来将文件上传到服务器。
如果数据中不存在文件名,我想将特定的错误消息返回给 fetch,以便将其显示给用户。
返回错误信息的正确方法是什么?
fetch(url, {
method: 'POST',
body: data,
}).then(function (response) {
if (!response.ok) {
return response.json()
.then(function (obj) {
throw Error(obj.ErrorMessage)
})
}
else {
return response.json()
.then(json => {
/*further processing */
})
}
}).catch(/* work with the error */)
/// Uploads the file chunk.
/// </summary>
/// <param name="collection">The collection.</param>
/// <returns>
/// ActionResult
/// </returns>
[HttpPost]
[ValidateAntiForgeryToken]
[Log(ClickTrackingItemTypeConstants.DataPost)]
public async Task<ActionResult> UploadFileChunk(FormCollection collection)
{
var fileDataParam = JsonConvert.DeserializeObject<UploadFileChunkFileDataModel>(collection["fileDataParam"]);
if (fileDataParam == null)
{
throw new RubixGenericException(nameof(fileDataParam));
}
fileDataParam.FileName = string.Empty;
if (string.IsNullOrWhiteSpace(fileDataParam.FileName) == true)
{
throw new Exception("error...");
}
fileManagerUtilities.AppendContentToFile(fileDataParam.FileGuid, fileDataParam.FileExtension, Request.Files[0]);
if (fileDataParam.ChunkIndex == (fileDataParam.ChunkTotalCount - 1))
{
System.Diagnostics.Debug.WriteLine("file can be uploaded now");
}
return Json(new { success = true });
}
下面是响应的样子:
【问题讨论】:
-
这是什么版本的 .NET?是 Framework 还是 .NET Core?
-
在此处查看此答案stackoverflow.com/a/43069917/2030565。你不想做的是抛出一个异常,因为你会得到一般的 500 错误。您可以返回一个合理的状态代码,例如 400 Bad Request,其中包含您的错误详细信息,然后您可以在 JavaScript 中对错误采取行动。如果您设计了一个通用响应“包”,因此错误和成功具有相同的字段,那么您可以用更少的代码行使您的 js 响应处理更通用。
-
@ReeceRussell: .net framework 4.6.1 -> 我也更新了这个问题,很抱歉忘记提出这个问题。
-
@Jasen:当我将它与您建议的帖子一起发回时,它仍然没有显示错误。我改成了badrequest,但是statusText什么都没设置?
-
空白的 statusText 似乎是使用 HTTP2 协议的working as intended。您可以使用浏览器验证stackoverflow.com/questions/54091567/…。无论如何,您在服务器端设置的正文应该包含您传回给客户端的任何数据或消息。
标签: c# asp.net-mvc fetch