2012-07-17 37 views
2

kendoUI網格使用HttpGet請求在AJAX請求期間更新數據。 (http://www.kendoui.c​​om/documentation/asp-net-mvc/helpers/grid/ajax-binding.aspx)服務器返回一個Json結果,並且爲了使它起作用,我們需要使用下面的代碼:肯德威格在mvc3安全漏洞中,我該如何解決它?

return Json(Result, JsonRequestBehavior.AllowGet); 

,沒有工作得很好,但它是一個安全漏洞(這就是爲什麼微軟讓我們把「AllowGet」在那裏)。

返回Json的安全方法是在HttpPost中,但是kendoui網格不允許它。

我想使用kendoui網格。有沒有辦法使用HttpGet,返回Json,並安全地做到這一點?

謝謝!

回答

4

如果您使用的是Kendo Grid的MVC包裝,這不會發生。那裏的網格被配置爲發出POST請求,因爲這個ASP.NET MVC行爲。確保你已經包含了kendo.aspnetmvc.min.js。更多信息可以在docs找到。

+0

我已經包含了kendo.aspnetmvc。 min.js.當我用[HttpPost]裝飾我的動作時,網格不再更新。只有Action是[HttpGet]時纔會更新。你能告訴我他們在談論這個文檔的位置嗎?在我提供的鏈接中,他們說它會執行HttpGet請求。 HttpPost從未被提及。 – user1304444 2012-07-18 15:29:21

+0

找到了。你完全正確。我的腳本源中有拼寫錯誤。謝謝! – user1304444 2012-07-18 16:01:06

+0

感謝此信息... – 2012-10-16 05:49:39

2

kendo datasource在使用ajax時默認使用GET,但可以通過定義傳輸設置來使用POST來使用POST。

以下是使用帖子在Telerik kendo CRUD example處縮短的代碼版本。

<script> 
    $(function() { 
     $("#grid").kendoGrid({ 
      toolbar: ["create", "save", "cancel"], 
      dataSource: { 
       schema: { 
        model: { 
         id: "ProductID", 
         fields: { 
          ProductID: { editable: false, nullable: true }, 
          ProductName: { validation: { required: true } }, 
          UnitPrice: { type: "number", validation: { required: true } } 
         } 
        } 
       }, 
       transport: { 
        create: { 
         url: "Products.svc/Create", 
         contentType: "application/json; charset=utf-8", 
         type: "POST" 
        }, 
        read: { 
         url: "Products.svc/Read", 
         contentType: "application/json; charset=utf-8", 
         type: "POST" 
        }, 
        parameterMap: function(data, operation) { 
         if (operation != "read") { 
          return JSON.stringify({ products: data.models }) 
         } 
        } 
       } 
      } 
     }); 
    }); 
</script> 
+0

我看到你可以在哪裏使用類型:「POST」,但我沒有看到MVC中的等價物。我試過'Datasource()。Read()。Type(「Post」)',但沒有「.Type()」也沒有「Datasource()。Transport()」 – user1304444 2012-07-18 15:33:01