2016-02-04 63 views
1

我們正在使用MS Dynamics Crm 2016 Online,我們需要從客戶端使用Azure託管WebApi。我們試圖使用ajax調用獲取數據..在MS Dynamics Crm之外,我們使用相同的代碼,但在Dynamics Crm中,我們得到了Access拒絕錯誤。我們已經在webapi中啓用了CORS,但我們仍然遇到這個問題。看起來它與Dynamics CRM有關,但我們無法找到原因和解決方案。消費Azure在MS Dynamics CRM Online中託管WebApi

下面是示例代碼作品MS以外動態CRM

 $.ajax({ 
      url: 'http://myaccountapi.azurewebsites.net/api/Account', 
      type: 'POST', 
      data: 'testaccount', 
      contentType: "application/json", 
      success: function(data) { 
       processData(data); 

      }, 
      error: function (error) { 
       alert(error.statusText); 
      } 
     }); 

但相同的代碼拋出 CRM它說中的錯誤拒絕訪問

+0

你有沒有添加任何防禦層或認證層的API? – techmike2kx

+0

來自您發佈的代碼很難找到原因 –

+0

API目前處於打開狀態...否驗證是必需的。 –

回答

1

因此,您有一個的網頁嘗試致電myaccountapi.azurewebsites.net。這不是一個CRM問題。

您正在提出一個可能導致訪問被拒絕的消息的跨站點請求 - 因爲我猜測,您沒有在WebApi應用程序中啓用CORS。

你可以查看完整的示例:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

啓用CORS

現在,讓我們能夠在WebService的應用CORS。首先,添加CORS NuGet 包。在Visual Studio中,從工具菜單中選擇庫包 管理器,然後選擇程序包管理器控制檯。在包管理器 控制檯窗口中,鍵入以下命令:

Install-Package Microsoft.AspNet.WebApi.Cors

此命令安裝最新的包和更新所有的依賴關係, 包括核心Web API庫。用戶-Version標誌以目標 爲特定版本。 CORS軟件包需要Web API 2.0或更高版本。

打開文件App_Start/WebApiConfig.cs。將以下代碼添加到 WebApiConfig.Register方法。

using System.Web.Http; 
namespace WebService 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // New code 
      config.EnableCors(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    } 
} 

接下來,添加[EnableCors]屬性的類的TestController:

using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Cors; 

namespace WebService.Controllers 
{ 
    [EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")] 
    public class TestController : ApiController 
    { 
     // Controller methods not shown... 
    } 
} 
+0

CORS已啓用,但我們仍然遇到此問題。我在互聯網上的某個地方發現,我們需要使用Azure Service Bus從Azure託管API獲取數據,並且它可以正常工作。 –

0

隨着CRM Online是你還需要使用SSL來訪問外部資源的加密連接上訪問。只需更改您的網址使用https,你應該很好去:

 $.ajax({ 
     url: 'https://myaccountapi.azurewebsites.net/api/Account', 
     type: 'POST', 
     data: 'testaccount', 
     contentType: "application/json", 
     success: function(data) { 
      processData(data); 

     }, 
     error: function (error) { 
      alert(error.statusText); 
     } 
    }); 
相關問題