2016-08-04 12 views
2

GETとPOSTを受け入れ、ビューとJSONを返す複数のコントローラを持つサイトを開発しました。開発環境ではすべて正常に動作します。Sitecore AJAX POST:アクションメソッドを呼び出せませんでした

しかし、クライアントの受け入れサーバーには問題があります。すべてのGETが結果を返しますが、POSTはhere by John Westというエラーを返します。 Stacktraceは同一です。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <pipelines> 
     <initialize> 
     <processor type="[Namespace].Assistance.Pipelines.RegisterWebApiRoutes, [Namespace].Assistance" 
        patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" /> 
     </initialize> 
    </pipelines> 
    </sitecore> 
</configuration> 

プロセッサは次のようである:

System.InvalidOperationException: Could not invoke action method: askquestion. Controller name: Assistance. Controller type: [Namespace].Assistance.Controllers.AssistanceController 

我々は、各コントローラのルートを定義するアプローチを使用

public class RegisterWebApiRoutes 
{ 
    public void Process(PipelineArgs args) 
    { 
     RouteTable.Routes.MapRoute(
      name: "Assistance.Api", 
      url: "api/assistance/{action}", 
      defaults:new {controller = "Assistance" }); 
    } 
} 

アクションメソッドは、この

[HttpPost] 
public ActionResult AskQuestion(AskQuestionViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     .... 

     return View("Confirmation"); 
    } 
    else 
    { 
     return View(model); 
    } 
} 
似ています

何が起こっていますか?どうやらSitecoreはAJAX POST要求をブロックします。間違いなく、これは構成上の問題です。どこを見ますか?

答えて

2

問題を発見しました。

URLRewrite Moduleには、LowerCaseRule1というルールが1つ(またはそれ以外の場合もあります)あります。しかし、それが仕事になったとき、要求はGETに変わった。コントローラは対応するGETアクションを見つけることができず、voila:アクションメソッドを呼び出せませんでした。

私は単純に書き換えルールに例外を追加していました。

<rewrite> 
    <rules> 
    <rule name="LowerCaseRule1" stopProcessing="true"> 
     <match url="[A-Z]" ignoreCase="false" /> 
     <action type="Redirect" redirectType="Permanent" url="{ToLower:{URL}}" /> 
     <conditions> 
     <add input="{URL}" pattern="^.*\.(axd|ashx|asmx|lic|ico|swf|less|aspx|ascx|css|js|jpg|jpeg|png|gif)$" negate="true" ignoreCase="true" />     

     <!-- here is my exception --> 
     <add input="{URL}" pattern="/api/assistance" negate="true" /> 
     </conditions> 
    </rule> 
    </rules> 
</rewrite> 
関連する問題