2015-11-11 99 views
0

我想通過http發送一個包含函數的類。 這可以完成嗎?通過Http發送邏輯

它應該像這樣的工作:

1)客戶聯繫Web.API。
2)Web.API返回類的功能
3)客戶端執行函數。

類看起來有點像這樣:

public class UploadTicket 
{ 
    public string url { get; set; } 
    public List<Tuple<string, string>> Headers { get; set; } 

    public Func<string> SpecialFunction { get; set; } 
} 

我需要這個功能通過每一個包被髮送時附加的ID改變的uploadURL - 但前提是一定的dataProvider,而在其他情況下, uploadurls必須以其他方式修改。我需要這樣做,所以我可以保持客戶端代碼儘可能通用。

+0

爲什麼不能在客戶端上存在函數?你試圖解決什麼樣的總體問題? – DGibbs

+0

簡單的答案 - 你不能這樣做。您不能通過HTTP發送C#方法,而且還需要在JS中執行C#方法。您需要在客戶端或服務器端實現此邏輯並使用它。 –

+0

@DGibbs該函數需要在服務器端生成,因爲根據客戶端需要聯繫誰的邏輯會有所不同 - 基本上我需要在客戶端創建一個永遠不需要再次修改的方法 - 如果可能的話,都必須在服務器端進行處理。 – OneBigQuestion

回答

1

聽起來有點愚蠢,但是你可以,條件是你發送源到客戶端,而不是一些預編譯的版本(否則它真的會是一個巨大的安全漏洞)。只需使用C# runtime compiler即可。但它意味着客戶端是C#,這就是爲什麼它聽起來很愚蠢。

這實際上是每個人每天都在使用的常見模式。想象一下訪問web服務器的web瀏覽器,並獲取一個包含javascript的頁面。同樣的事情發生。瀏覽器編譯JS並執行它,即使源是遠程生成的。

+0

我看着它,不幸的是我在xamarin中創建這個項目,並且項目無法跨平臺共享C#運行時編譯器 - 但是感謝您的建議。 – OneBigQuestion

+0

我很確定我之前用MonoDevelop完成了這個任務,它基本上是xamarin的舊版本。您只需在運行時使用Mono.CSharp.dll。 – mprivat