9

私のアプリは HttpWebRequest の「Put」メソッドを使用して、iis7 でホストされている asp.net アプリにファイルをアップロードします。Status Code 405 Method Not Allowed というエラーが発生しました。フォーラムで見つけたすべての解決策を 2 日間試しました。これには、ハンドラーの webDav の削除、ハンドラーへの「Put」メソッドの追加が含まれます ( http://blogs.msdn.com/b/joseph_fultz/にあるように) archive/2009/07/23/enabling-the-put-verb-with-handlers-and-iis-7-0.aspx )、asp.net を iis に再登録します。しかし、私の場合、どの解決策も機能しません。

iis で Failed Request Tracing を実行すると、以下のエラーが表示されます。

MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName  StaticFileModule
Notification    128
HttpStatus  405
HttpReason  Method Not Allowed
HttpSubStatus   0
ErrorCode   2147942401
ConfigExceptionInfo     
Notification    EXECUTE_REQUEST_HANDLER
ErrorCode   Incorrect function. (0x80070001)
    MODULE_SET_RESPONSE_ERROR_STATUS
Warning     

ModuleName="StaticFileModule", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="405", HttpReason="Method Not Allowed", HttpSubStatus="0", ErrorCode="Incorrect function

どんな助けでも大歓迎です。ありがとう。私のasp.netアプリ/フォームは、Visual Studio 2008を使用して開発され、iis 7で公開されました.

- - - - - - - - - - - - - - - - - - - - アップデート

HttpWebRequest (PUT) を処理するコードは次のとおりです。ユーザー認証トークンを取得して検証します。その後、認証チケットとユーザーへの応答を作成しました。

     tokenSignature = false;

        //To capture the tokenId
        string MainString = Request.Headers.ToString();
        int FirstChr = MainString.IndexOf("*=");
        MainString = MainString.Substring(FirstChr + 2);
        int secondChr = MainString.IndexOf("%");
        tokenId = MainString.Substring(0, secondChr);


        //to Write the received encrypted token into temporary folder
        FileStream fs = new FileStream(AppsConfig.temp + tokenId, FileMode.Create);
        BinaryWriter bw = new BinaryWriter(fs);

        //Convert the listenerRequest into InputStream to write the token
        Stream InputStream = Request.InputStream;
        byte[] inData = new byte[32768];
        int bytesRead;

        while ((bytesRead = InputStream.Read(inData, 0, inData.Length)) > 0)
        {
            bw.Write(inData, 0, bytesRead);
        }

        //close the connection that is used to write the token
        bw.Close();
        fs.Close();

        //Read the temporary encrypted token (for decryption purposes)
        fin = File.OpenRead(AppsConfig.temp + tokenId);

        //To read the private key
        Stream prSignKey = File.OpenRead(AppsConfig.privateKey);
        PgpSecretKey pgpSec;
        PgpSecretKeyRingBundle ringBundle = new PgpSecretKeyRingBundle(PgpUtilities.GetDecoderStream(prSignKey));

        //Get the company key Id and passphrase
        String[] getText = new String[2];
        int no = 0;
        TextReader readFile = new StreamReader(AppsConfig.keyFile);

        do
        {
            getText[no] = readFile.ReadLine();
            no++;
        } while (no < 2);
        readFile.Close();
        long KeyId = Int64.Parse(getText[0]);
        Char[] passwd = getText[1].ToCharArray();
        //Get the private key
        pgpSec = ringBundle.GetSecretKey(KeyId);
        PgpPrivateKey pgpPrivate = pgpSec.ExtractPrivateKey(passwd);

        //Close all unnecessary connections
        InputStream.Close();
        prSignKey.Close();
        readFile.Close();

        //Call the decrypt method to decrypt the token
        decryptFile(fin, pgpPrivate, "original.xml", tokenId);

        if (tokenSignature == true)
        {
            //Create the authentication cookie and add this cookie to the httpResponse
            //This authentication cookie would be used to access the resource.aspx
            HttpCookieCollection cc = Response.Cookies;
            FormsAuthentication.SetAuthCookie(tokenId, false);
            cc = Response.Cookies;

        //remove the temporary file that was created earlier.
            File.Delete(AppsConfig.temp + tokenId);
            File.Delete(AppsConfig.temp + tokenId + ".bin");
        }
        else
        {
            Server.Transfer("~/Error.aspx?errorMessage=" + "SignatureFailed");

        }
4

2 に答える 2

13

この問題を解決する方法もいくつかあります。

1) WebDAV をサーバーから完全にアンインストールします。これは、Windows の機能の追加と削除アプリから実行できます。これには再起動が必要です。

2) 2 番目の解決策は簡単です。A) IIS サイトに移動し、モジュールをクリックします。WebDAV モジュールを見つけて削除します。

これで、他のサイトで WebDAV を引き続き使用でき、このサイトの PUT メソッドに干渉することはありません。

ここに画像の説明を入力

B) 正しいハンドラー マッピングを見つけて、PUT 動詞を追加する必要がある場合があります。

于 2012-08-11T19:02:31.607 に答える
1

コードに問題があるとは思いません... PUT動詞が許可されていない場合、クライアントはファイルをPUTできません。「許可されていない」とは言っていません。これは、アクセス許可の問題である場合に当てはまります...これはまだ IIS 構成の問題だと思います。このリンクをチェックしてください:

http://support.microsoft.com/kb/942051/en-us

自分で物事を簡単にするために、このツールが良いと聞いたのでチェックしてみてください。

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21625

HTH。

于 2011-08-25T03:31:55.553 に答える