2016-11-21 53 views
0

我是新的.Net(任何帮助将不胜感激),我试图实现这个类写入休息api。它所做的只是传入一些数据并为该服务执行postAsJsonAsync。它是用C#编写的,并转换为VB.net以添加到VB.net应用程序解决方案中。 它工作一次,然后第二次调用失败,当它初始化Uri的另一个实例。 抛出的异常:System.Net.Http.dllequest中的'System.InvalidOperationException'。“} {”该实例已经启动了一个或多个请求。属性只能发送第一个请求之前修改“} 代码在这里:我在做什么错,叫一个休息api

Imports System.Collections.Generic 
Imports System.Configuration 
Imports System.Linq 
Imports System.Text 
Imports System.Threading.Tasks 
Imports System.Net.Http 
Imports System.Net.Http.Headers 

Namespace Logging 
    Public Class LogMessage 
     Public Property Application As String 
     Public Property Area As String 
     Public Property Activity As String 
     Public Property Description As String 
     Public Property User As String 
    End Class 

    Public Class ActionLogging 

     Public Shared Client As New HttpClient() 

     Public Shared Function AddToActionLog(Activity As String, Description As String, User As String) 
      Dim message = New LogMessage() With { _ 
       .Activity = Activity, _ 
       .Description = Description, _ 
       .User = User, _ 
       .Application = ConfigurationManager.AppSettings("Application"), _ 
       .Area = ConfigurationManager.AppSettings("Area") _ 
      } 

      If Run(message) IsNot Nothing 
       Run(message).Wait()   
      End If 

     End Function 

     Public Shared Function CreateMessage(message As LogMessage) As Uri 
      Dim task = Client.PostAsJsonAsync("Action", message) 
      task.Wait() 
      Dim response As HttpResponseMessage = task.Result 
      response.EnsureSuccessStatusCode() 
      Return response.Headers.Location   
     End Function 


     Public Shared Function Run(message As LogMessage) As Task 
      Client.BaseAddress = new Uri(ConfigurationManager.AppSettings("RestAPIServer")) 
      Client.DefaultRequestHeaders.Accept.Clear() 
      Client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) 

      CreateMessage(message) 

     End Function 

    End Class 
End Namespace 
+1

什么异常的一部分,目前尚不清楚你做什么里面'的run()'只能在发送之前做了什么?第一个请求 – CodeCaster

+0

是的,我明白这个例外,我不知道如何设置'DefaultRequestHeaders'只有一次,这个类会在同一个会话中多次调用,我做这些调用的方式显然是错误的,但是我不能请参阅如何以不同方式执行此操作 –

+0

找到了合适的解决方案,希望这可以帮助未来的其他人 –

回答

0
Imports System.Configuration 
Imports System.Threading.Tasks 
Imports System.Net.Http 
Imports System.Net.Http.Headers 

Namespace Logging 
    Public Class LogMessage 
     Public Property Application As String 
     Public Property Area As String 
     Public Property Activity As String 
     Public Property Description As String 
     Public Property User As String 
    End Class 

    Public Class ActionLogging 

     Private ReadOnly Shared Client As New HttpClient() With {.BaseAddress = new Uri(ConfigurationManager.AppSettings("RestAPIServer"))} 

     public Sub New() 
      Client.DefaultRequestHeaders.Accept.Clear() 
      Client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))  
     End Sub 

     Public Shared Function AddToActionLog(activity As String, description As String, user As String) 
      Dim message = New LogMessage() With { _ 
       .Activity = Activity, _ 
       .Description = Description, _ 
       .User = User, _ 
       .Application = ConfigurationManager.AppSettings("Application"), _ 
       .Area = ConfigurationManager.AppSettings("Area") _ 
      } 

      SendMessage(message) 

     End Function 

     Private Shared Sub SendMessage(message As LogMessage)    
      Dim task = Client.PostAsJsonAsync("Action", message) 
      task.Wait() 
      Dim response As HttpResponseMessage = task.Result 
      response.EnsureSuccessStatusCode()    
     End Sub 

    End Class 
End Namespace