2013-05-12 49 views
6

我似乎已經追查到這個問題,但不知道如何解決它,或者如果我可以。缺少request.CreateResponse在vb.net Webapi項目

當我創建一個新的C# WebAPI項目,並添加System.Net.Http我可以訪問 Request.CreateResponse<T>進口。

當我創建一個新的VB.Net WebAPI項目,併爲System.Net.Http添加導入時,我擁有的全部是Request.createODataErrorResponse

無論如何,我可以忽略智能感知並訪問CreateResponse。似乎VB只是不正確地解釋各種擴展。

我想修復智能感知,但並不真的需要它。

謝謝!

史蒂夫

更新 我發現這forum post一個答案早在2012年8月解釋說,它已被複制,但似乎還沒有被固定。

因爲我是新來的,應該關閉嗎?

+0

我想,這是由於IDE設置,高級選項隱藏在VB中的智能感知(像「show advanced members」這樣的選項)。 – shahkalpesh 2013-05-13 07:09:55

+0

由於mVS2012的選項中的選框是select的自動列表成員,並且取消選擇了隱藏高級成員,因此這看起來並不相關。 – Steve 2013-05-14 12:20:07

回答

0

有一種變通方法

我想出了以下解決方案:

  1. 創建擴展方法CreateResponse2調用原CreateResponse方法
  2. 在你的控制器,調用新的自定義方法(Request.CreateResponse2(...)

下面是我的解決辦法:

創建控制器一個新的模塊HttpRequestMessageExtensions

Imports System.Net 
Imports System.Net.Http 
Imports System.Web 
Imports System.Runtime.CompilerServices 
Imports System.Web.Http 

Public Module HttpRequestMessageExtensions 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage,  statusCode As HttpStatusCode, value As T) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, Configuration As HttpConfiguration) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, Configuration) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, mediaType As String) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, mediaType As Headers.MediaTypeHeaderValue) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter, mediaType As String) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter, mediaType) 
    End Function 

    <Extension()> _ 
    Public Function CreateResponse2(Of T)(ByVal request As HttpRequestMessage, statusCode As HttpStatusCode, value As T, formatter As Formatting.MediaTypeFormatter, mediaType As Headers.MediaTypeHeaderValue) As HttpResponseMessage 
     Return request.CreateResponse(Of T)(statusCode, value, formatter, mediaType) 
    End Function 

End Module 

用法:

Return Request.CreateResponse2(Of SomeClass)(HttpStatusCode.BadRequest, objSomeClass) 

截圖:

Working Workaround