2010-09-02 93 views
0

我正在使用MVC應用程序作爲服務,所以我刪除了視圖。我能夠做出控制器電話:如何將文件從MFC客戶端(CInternetSession)上傳到ASP.NET MVC

public class HomeController : Controller 
{ 
    // GET: /Home/ 
    public string Index(string param1, string param2) { 
     ... 
    } 

從MFC應用程序:

string URL(_T("http://localhost:2374/home/index/myparam1/myparam2")); 
pHttpFile = dynamic_cast<CHttpFile*> (m_Session.OpenURL(URL)); 
if (pHttpFile) { 
    CHAR szBuff[1024] = { 0 }; 
    while (pHttpFile->Read(szBuff, 1024) > 0) { 
     info += szBuff; 
     ... 

我們上傳一個XML文件,我想這在MFC客戶端上:

CHttpConnection *pHttpConn = m_Session.GetHttpConnection(_T("localhost:2374")); 
if (pHttpConn) 
{ 
    CHttpFile *pHttpFile = pHttpConn->OpenRequest(
     CHttpConnection::HTTP_VERB_POST, 
     _T("file.xml")); 
    DWORD dwRet = 0; 
    pHttpFile->QueryInfoStatusCode(dwRet); 
    if (dwRet == HTTP_STATUS_OK) 
    { 
     CString headers(_T("Content-type: text/xml; charset=utf-8")); 
     if (pHttpFile->AddRequestHeaders(headers)) 
     { 
      if (pHttpFile->SendRequestEx(xml.GetLength(), HSR_SYNC | HSR_INITIATE)) 
      { 
       pHttpFile->Write(xml, xml.GetLength()); 
       pHttpFile->EndRequest(HSR_SYNC); 
       ... 

,這在MVC方面:

[AcceptVerbs(HttpVerbs.Post)] 
    public void FileUpload(HttpPostedFileBase uploadFile) 
    { 

客戶端執行時沒有錯誤,但服務器端沒有任何反應。我不知道如何獲取Controller中調用的FileUpload()。我是否使用MapRoute(),如果是這樣的話?

+0

什麼是MFC告訴我他們。 – 2010-09-02 05:40:31

+0

@ 4thpage:MFC - 微軟基礎類(VC++)。 – amolbk 2010-09-02 05:43:16

+1

是的,URL和動詞需要匹配最終以'FileUpload()'方法結束的路由。通常,這將是一個POST到'/ controllername/FileUpload'。 URL'/ home/index/myparam1/myparam2'通常映射到'HomeController'的'Index()'方法,'myparam1'和'myparam2'作爲方法參數。將URL映射到ASP.NET中的方法的過程稱爲* URL路由*,並存在於ASP.NET 4 Web窗體和ASP.NET MVC中。你是怎麼想出ASP.NET MVC作爲向MFC客戶端提供服務的選擇的? :) – bzlm 2010-09-02 11:20:10

回答

1

服務器端沒有任何變化。

問題是C++客戶端。您應該調用的上傳文件的網址是http://localhost:2374/home/fileupload。如果方法fileupload在家庭控制器中。你不需要任何其他路線。

我在代碼項目http://www.codeproject.com/KB/library/lyoulhttpclient.aspx上找到了一個用winnet上傳文件的代碼示例。我不是C++的人,可能還有更多。但這個看起來不錯。

+0

是的,問題確實在客戶端。改變OpenRequest()的第二個參數解決了問題: CHttpFile * pHttpFile = pHttpConn-> OpenRequest( CHttpConnection :: HTTP_VERB_POST, _T(「home/FileUpload」)); 現在控制器的FileUpload()被SendRequest()調用。 感謝@ Christian13467和@bzlm。 – amolbk 2010-09-03 09:48:49

相關問題