2017-07-26 142 views
2

我有一個簡單的HTML頁面,它有一個文本框和一個提交按鈕。我有一個Azure函數,當它打到文本框的內容時,我們應該發送給Azure函數併發送郵件(代碼是用C#中的Azure函數編寫的)。從Javascript調用Azure函數

我做了什麼:

我把文本框的值,並呼籲通過AJAX的功能,但它並不觸及根本。它發回400錯誤代碼。

我想要的只是使用Javascript來實現該功能。因爲我只有一個普通的HTML頁面,JS是我可以與之通信的唯一手段。

這是功能URL

https://smtpgmail.azurewebsites.net/api/HttpTriggerCSharp1?code=ihrbDCeo2DPdxPXDKiQWyNFYfaMFZhk9rkaYFaHO3LFsNEmrabj9Cw==

,預計參數「名」,我在瀏覽器中選中它通過粘貼這樣

https://smtpgmail.azurewebsites.net/api/HttpTriggerCSharp1?code=ihrbDCeo2DPdxPXDKiQWyNFYfaMFZhk9rkaYFaHO3LFsNEmrabj9Cw==&name=testName

這是我發現的in firefox

enter image description here

如果您需要更多信息,請讓我知道

+0

通常400意味着你沒有發送所有需要的信息。您嘗試撥打什麼端點以及您發送的數據是什麼? – Brig

+0

它需要一個查詢字符串變量,我已將它傳遞給它 –

+0

您是否可以用確切的代碼和參數以及400錯誤的詳細信息更新您的問題。通常400錯誤會給它提供額外的信息。 – Brig

回答

3

這絕對是CORS相關的問題。幸運的是,在門戶網站中爲功能應用程序配置CORS很容易。只要瀏覽到您的功能應用,然後選擇平臺的特點:

enter image description here

選擇下API的CORS選項,它會帶你到一個屏幕,您可以將您的客戶方應用程序的主機名:

enter image description here

+0

謝謝@ jesse,這工作。截至目前,我正在從本地機器進行測試,並且HTML頁面沒有託管在任何地方,我在允許的來源列表中添加了「*」,並且它工作正常。感謝隊友 –

+0

Np很高興你得到它的工作 –

+0

賽和傑西,我可以證實一些事情。我們可以有一個客戶端只有Javascript解決方案不使用像ADAL這樣的認證庫來調用AAD認證的Azure功能?我們似乎無法得到這個工作。即使簡單的客戶端也在Azurewebsites域下運行。 – o365spo

1

這看起來像是一個跨源請求被阻止。通常情況下,您無法通過瀏覽器向其他主機發送請求。您將需要使用CORS或後端代碼。

請注意請求的方法是OPTIONS而不是Post或Get。通常這意味着瀏覽器阻止了該呼叫。

這裏是一個節點解決方案的鏈接。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook

+0

謝謝Brig,我已經通過了這些例子,但在我的情況下,我只是有一個文本框和一個按鈕,所以我只想調用Azure函數這個簡單的設置。我不想爲此創建一個ASPX頁面或PHP頁面並在服務器上運行。如果它不可能,那麼它很好。只是好奇知道 –