【发布时间】:2021-02-02 18:43:41
【问题描述】:
我有这个有效的代码。我想查看 Web.API 调用,即 Fiddler 中的 https://localhost:44335/。我想在 Fiddler 中查看 Web.API 调用。我所看到的只是 POST 到索引。有人可以告诉我如何捕获对 https://localhost:44335 的请求。花了 5 个小时研究答案,但没有奏效。
@using aModel
@{
ViewBag.Title = Constants.Title_Home_Page;
}
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
Import Cases
<div>
@Html.TextBox("theFile", "", new { type = "file" }) <br />
<input type="submit" value="Upload" />
@ViewBag.Message
</div>
</div>
}
控制器
public class HomeController : Controller
{
public ActionResult Index(int? id)
{
return View();
}
[HttpPost]
public ActionResult Index()
{
var handler = new WebRequestHandler()
{
AllowAutoRedirect = false,
UseProxy = false,
ReadWriteTimeout = 120000
};
var requestUri = $"api/File/SaveFile/";
if (Request.Files.Count > 0)
{
var file = Request.Files[0];
using (HttpClient client = new HttpClient(handler) { BaseAddress = new Uri("https://localhost:44335/") })
{
using (var content = new MultipartFormDataContent())
{
byte[] fileBytes = new byte[file.InputStream.Length + 1];
file.InputStream.Read(fileBytes, 0, fileBytes.Length);
var fileContent = new ByteArrayContent(fileBytes);
fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = file.FileName };
content.Add(fileContent);
var result = client.PostAsync(requestUri, content).Result;
}
}
}
return View();
}
API
public class FileController : BaseController
{
[HttpPost]
//https://stackoverflow.com/questions/35412051/posting-file-from-mvc-to-web-api/43248473
public HttpResponseMessage SaveFile()
{
try
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
if (System.Web.HttpContext.Current.Request.Files.Count > 0)
{
var file = System.Web.HttpContext.Current.Request.Files[0];
file.SaveAs(@"C:\myfolder\aFile.png");
return new HttpResponseMessage(HttpStatusCode.Created);
}
else
{
return new HttpResponseMessage(HttpStatusCode.BadRequest);
}
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.StackTrace);
}
}
}
【问题讨论】:
-
如果您的应用程序没有使用 Windows 的默认代理配置,您必须在
HttpClient实例中显式添加 fiddler 作为 http/https 代理。
标签: asp.net-mvc fiddler