[英]Cannot implicitly convert type 'object' to 'int'. An explicit conversion error exists
[英]vb.NET to C# conversion error: Cannot implicitly convert type 'object' to 'MyCustomObject' An explicit conversion exists
我正在尝试将在网上找到的某些VB.net代码转换为一些C#代码,但是在我的C#代码中,此行代码出现以下错误:
DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());
具体的错误代码为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Dispatcher;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Users;
using MyTypes;
public class SecurityTokenInspector : IParameterInspector
{
public string Roles;
public SecurityTokenInspector(string value)
{
Roles = value;
}
public object BeforeCall(string operationName, object[] inputs)
{
// token will always be the last parameter
int index = inputs.Length - 1;
string TokenId = inputs[index].ToString();
// ********** ERROR LINE BELOW HERE *********** //
// THE ERROR IS HAPPENING WITH THIS LINE: //
// ****** first make sure token exists ****** //
DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());
if (token == null)
{
throw new Exception("Security Token Expired. Please request a new Token");
}
// if token exists, check user roles
UserInfo user = UserController.GetUserById(0, token.UserID);
if (!(user.IsInRole(Roles)))
{
throw new Exception("Access Denied. Role Membership Requirements not met");
return null;
}
return null;
}
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
return;
}
}
Imports System Imports System.ServiceModel.Dispatcher Imports DotNetNuke.Common.Utilities Imports DotNetNuke.Entities.Users Public Class SecurityTokenInspector Implements IParameterInspector Public Roles As String Public Sub New(ByVal value As String) Roles = value End Sub Public Function BeforeCall(ByVal operationName As String, _ ByVal inputs() As Object) As Object _ Implements IParameterInspector.BeforeCall ' token will always be the last parameter Dim index As Integer = inputs.Length - 1 Dim TokenId As String = inputs(index).ToString() ' first make sure token exists Dim token As DNNServiceSecurityToken = _DataCache.GetCache("DNNSecurityToken_" & TokenId) If token Is Nothing Then Throw New Exception( _ "Security Token Expired. Please request a new Token") End If ' if token exists, check user roles Dim user As UserInfo = UserController.GetUserById(0, token.UserID) If Not user.IsInRole(Roles) Then Throw New Exception( _ "Access Denied. Role Membership Requirements not met") Return Nothing End If Return Nothing End Function Public Sub AfterCall(ByVal operationName As String, _ ByVal outputs() As Object, ByVal returnValue As Object, _ ByVal correlationState As Object) _ Implements IParameterInspector.AfterCall Return End Sub End Class
您需要将返回对象强制转换为变量的对象类型:
DNNServiceSecurityToken token = (DNNServiceSecurityToken) DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());
根据错误提示尝试投射它:
DNNServiceSecurityToken token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString()) as DNNServiceSecurityToken;
您是否真的需要将该令牌作为DNNServiceSecurityToken? 还是GetCache返回的类型也能正常工作?
尝试这个:
var token = DataCache.GetCache("DNNServiceSecurityToken_" + TokenId.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.