我在C#中有一个MVC项目,在我的一个控制器中,我接受来自外部源的HTTP POST数据并尝试保存文件。我已经尝试了许多不同的方法签名,但我有一点时间搞清楚要使用哪一个。我知道他们不能工作,因为每次我尝试发布到URL时,我的IIS日志中都会出现404错误。
我尝试过的一些事情是
public ActionResult Index(FormCollection forms)
public ActionResult Index(FormCollection forms, HttpPostedFileBase files)
public ActionResult Index()
我正在将请求写入失败的请求日志,以尝试获取更多信息,我看到标题是:
Content-Length: 158293970
Content-Type: multipart/form-data; boundary=--------------------9228c56ead9fc97c
Accept-Encoding: gzip
Host: myhostinformationhere
User-Agent: SecurityCenter/5.3.1 (201604012350)
有什么建议吗?
我发现的更多信息。发布到我的网站的代码是使用curl的php代码。在没有透露太多供应商源代码的情况下,我看到他们正在做的一些事情可能有助于解决问题。标题代码是
$sendHeaders = array ("Except:","X-SecurityCenter: $uuid", "Accept: application/html; charset=utf-8",);
他们也在添加像这样的帖子
$postFields['reportType'] = $reportType;
$postFields['reportContent'] = curl_file_create($pathInfo['filepath'],$pathInfo['type'],basename($pathInfo['filepath']));
我已将代码更新为以下内容,但我现在在日志中收到超时错误
public ActionResult Index(HttpPostedFileBase upload)
{
if (upload != null && upload.ContentLength > 0)
{
var fileName = Path.GetFileName(upload.FileName);
var path = Path.Combine(Server.MapPath(~/Files/Uploads"), fileName);
upload.SaveAs(path);
}
return View();
}
因此,通过上面的代码,我已经向fiddler确认了一个文件被捕获并上传到正确的目录。现在要弄清楚如何从客户端软件中发布帖子。
答案 0 :(得分:0)
如果我理解这一点,您应该在Controller中添加另一个Action。您不应该使用“索引”操作来尝试发布数据。尝试这样的事情。
[HttpPost]
public ActionResult Save( HttpPostedFileBase file )
{
if( file != null )
{
}
// Return something to signify success/failure
}
答案 1 :(得分:0)
以下是您可以尝试的一些事项。
尝试这样的动作方法:
public ActionResult Index(HttpPostedFileBase files)
{
// your work...
}
您需要做的下一件事是检查请求的请求正文;这应该在你的IIS日志中。复制该主体,然后使用Fiddler创建该确切的请求。 Here是关于如何使用Fiddler发布帖子请求的教程。
在MVC项目的Global.asax.cs文件中,输入以下代码:
/// <summary>
/// Handles the HttpApplication's Error event.
/// </summary>
protected void Application_Error()
{
// Put a breakpoint here to give you an idea of what is going wrong.
Exception exception = this.Server.GetLastError();
}
您也可以使用MVC route debugger来帮助您。
总之,继续尝试并让它与Fiddler合作,提供您从供应商处获得的确切要求。完成后,请再次尝试使用供应商产品。
您还可以使用Fiddler捕获来自供应商产品的请求,并使用该请求检查请求。