2017-03-02 6 views
0

ローカルで正常に動作するREST Webservicesを持つasp.net Webアプリケーションがありますが、Azureにアップロードするともう動作しません...私はPOSTasyncをやっていますしかし、ログファイルにGETが実行されているのがわかりました。Azure WebサイトでPOSTを実行できませんでした

提案したherehereでweb.configを更新しましたが、何も変更されませんでした。ここで

は私MessageControllerです:

Imports System.Net 
Imports System.Net.Http 
Imports System.Web.Http 
Imports Microsoft.Practices.EnterpriseLibrary.Logging 

Public Class Test 
    Public Subject As String 
    Public Body As String 
End Class 

Public Class MessagesController 
    Inherits ApiController 

    ' GET api/<controller> 
    Public Function GetAllValues() As DataTable 
    ... 
    End Function 
' POST api/<controller> 
Public Function PostValue(<FromBody()> ByVal value As Test) As HttpResponseMessage 
... 
End Function 

私も成功せず、サブPostValueに機能PostValueを変更しようとしました。

私のGlobal.asaxのは、次のようになります。GetAllValuesが存在する場合

Imports System.Web.SessionState 
Imports System.Web.Http 

Public Class Global_asax 
    Inherits System.Web.HttpApplication 

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
     Web.Routing.RouteTable.Routes.MapHttpRoute(name:="DefaultApi", routeTemplate:="api/{controller}/{id}", defaults:=New With { 
     Key .id = System.Web.Http.RouteParameter.[Optional]}) 
End Sub 

、PostAsyncは、何らかの理由でGetAllValuesを呼び出します。テストのためにGetAllValuesを削除すると、 "Method not allowed"と表示されます。ここで

は、私はREST Webサービスを呼び出すために私のテストaspxページで使用する方法である:

Private Async Sub PostTest_Click(sender As Object, e As EventArgs) Handles PostTest.Click 
    Dim m As New Test 
    m.Subject = "Test" 
    m.Body = "Testbody" 

    Dim client As New Http.HttpClient 

    Dim JsonData As String = JsonConvert.SerializeObject(m) 
    Dim theContent As New Http.StringContent(JsonData, Encoding.UTF8, "application/json") 
    Dim aResponse As Http.HttpResponseMessage = Await client.PostAsync("https://example.com/api/messages/", theContent) 

更新 私は私のコントローラからのGETメソッドを削除すると、私はエラーメッセージ「MethodNotAllowed」を取得します。返された内容を詳しく見ると、私はさらに混乱します。内容は次のとおりです。

{"Message":"The requested resource does not support http method 'GET'."} 

しかし、私はAwaitクライアントを使用しています。 投稿非同期....?私は今Fiddlerと、それを使用しました2 私もPostAsJsonAsyncを試してみたが、エラーがまだサポートされていないこと'GET'です....

アップデート3

更新POST自体が正常に機能しているようです... Fiddler Composerを使用すると、私の青いhttps URLにPOSTを送信することができ、POSTプロセスが期待どおりにトリガされます...なぜ、client.PostAsyncとclient.PostAsJsonAsyncの両方が同じコードがローカルホスト上でPOSTを送信している間に、空白のライブURLにGETを送信してください.... :-(

+0

ちょうど好奇心 - あなたのアプリは何のポートを聴いていますか? –

+0

これはhttpsを使用するので、私のasp.netソリューションに含まれているので、ポートは443にする必要があります。 – K232

答えて

1

最後に、私は私が最後のスラッシュを削除する必要がありました....答えを見つけました!私は "https://example.com/api/messages/"を使用しました。これは、PostAsyncまたはPostAsJsonAsyncのどちらを使用したかに関係なく、自動的にGETになります。

https://example.com/api/messages」では、GETとPOSTの両方が正常に機能しているようです。

0

私はそれが動作しませんAzureのためにそれをアップロードするとき、私はもう

開発環境の間で異なるIISの設定が含まれている場合がありますローカルで正常に動作しますRESTウェブサービスとのasp.netのWebアプリケーションを持っていますが、 Azure Web Appなどがあります。すべての要求はサーバー側でGET要求として扱われるようです。

Web.configにいくつかの設定を追加して、すべての動詞を有効にすることができます。構成は、管理対象パイプラインモードによって異なります。 Azure Web Appで選択したモードが統合されている場合は、次のコードを使用できます。

<handlers> 
    <remove name="WebDAV" /> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" 
     path="*." 
     verb="*" 
     type="System.Web.Handlers.TransferRequestHandler" 
     preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

あなたはAzureのWebアプリケーション上で選択したバージョンがクラシックの場合は、次のコードを使用できます。

<handlers> 
    <remove name="WebDAV" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" 
     path="*." 
     verb="*" 
     modules="IsapiModule" 
     scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
     preCondition="classicMode,runtimeVersionv4.0,bitness64" 
     responseBufferLimit="0" /> 
</handlers> 
+1

多くのおかげでアモール!私は前に両方を試していたが、何も変えなかった。今度はFiddlerで私は以下を見つけました:POST自体はうまくいっています....?私はFiddlerでPOSTを送信し、私のPOST-Functionは期待どおりに呼び出されました....今、私はなぜclient.PostAsyncとclient.PostAsJsonAsyncがGETリクエストを送信すべきか分かりません....?だから、問題は私のaspxページには、私のRESTサービス(またはIIS/azure)ではなく、要求を送信している..... – K232

関連する問題