2013-05-12 88 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