1

C# クライアント側アプリの作成を検討しています。このアプリでは、ファイルをサーバーにアップロードし、サーバーに文字列 (アップロードされたファイルの一意の識別子) で応答させる必要があります。

私は C# と ASP.Net MVC の両方に精通しており、慣れています。これらのテクノロジを使用して比較的安全な方法でこれを行うことはできますか? それとも、ある種の WCF Web サービスのようなものを追求する必要がありますか? (アップロードされたものは機密ではなく、ミッション クリティカルではないため、「比較的安全」であることに注意してください)

どちらの場合でも、トピックに関するリソースは (たとえそれが VB.Net にあったとしても) すばらしいでしょう。

どうもありがとうございました!

編集: いくつかのコードを投稿します。ファイル付きの POST を受け入れるイベントを 1 つだけ設定した単純な Web サイトを作成しました。

    [HttpPost]
    public string Upload(HttpPostedFileBase file)
    {
        string sPath = "";

        if (file != null && file.ContentLength > 0)
        {
            try
            {
                string sFileName = "test.txt";

                // Save file
                sPath = Path.Combine(Server.MapPath("~/App_Data/uploads"), sFileName).ToString();
                file.SaveAs(sPath);

                // Return val
                return sPath;
            }
            catch
            {
                return "Error on Save .. tried to save to\n" + sPath;
            }
        }

        return "no file";
    }

クライアント側では、C# アプリは次のことを行います。

        using (WebClient wc = new WebClient())
        {
            try
            {
                byte[] bResponse = wc.UploadFile("http://127.0.0.1/ISSHost/file/upload", "POST", "C:\\test.txt");
                string sResponse = System.Text.Encoding.ASCII.GetString(bResponse);
                MessageBox.Show("\nResponse received: " + sResponse);
            }
            catch(Exception exception)
            {
                string sError = exception.ToString();
                if (exception.InnerException != null)
                    sError += "\n" + exception.InnerException.ToString();

                MessageBox.Show("Error!\n" + sError);
            }
        }

        this.Dispose();
    }

できます。私が知りたいのは、これについて完全に間違った方法で行っているか、またはどのような種類のセキュリティ上の欠陥を公開している可能性があるか...などです。このようにすることでどのような影響が生じましたか? より良い方法はありますか?

さらに重要なことは、エンドユーザーがアップロードページに移動しようとするのを防ぐにはどうすればよいですか (この場合、http://127.0.0.1/ISSHost/file/upload実際にはページに「GET」部分がないため、404 だけです)。

再度、感謝します!

4

1 に答える 1

0

クライアント側で github の fileuploader.js を使用してみて、文字列を返すと、サーバー側のコードは次のようになります。

[HttpPost]    
public ActionResult Upload(string fileName)
{

------------
//your code ...

return Json(new{resultString="Uploaded Successfully."});
} 
于 2012-12-23T02:52:40.627 に答える