Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 无法访问Basecontroller MVC4的BeginExecuteCore()方法中的Request.Header_Asp.net Web Api - Fatal编程技术网

Asp.net web api 无法访问Basecontroller MVC4的BeginExecuteCore()方法中的Request.Header

Asp.net web api 无法访问Basecontroller MVC4的BeginExecuteCore()方法中的Request.Header,asp.net-web-api,Asp.net Web Api,谁能帮帮我吗?我试图在我的MVC4WebAPI应用程序中实现本地化。我想在以下基础上向用户显示特定于区域性的页面: 在请求头中传递“用户区域设置” 我所做的是,我有一个LinkedAccountModel类,如下所示- public class LinkedAccountModel { public string Id { get; set; } [Required(ErrorMessageResourceType = typeof(LanguageResources.Re

谁能帮帮我吗?我试图在我的MVC4WebAPI应用程序中实现本地化。我想在以下基础上向用户显示特定于区域性的页面: 在请求头中传递“用户区域设置”

我所做的是,我有一个LinkedAccountModel类,如下所示-

 public class LinkedAccountModel
{

    public string Id { get; set; }

    [Required(ErrorMessageResourceType = typeof(LanguageResources.Resource), ErrorMessageResourceName = "DomainNameRequired")]
    [DataType(DataType.Password)]
    [Display(Name = "DomainName", ResourceType = typeof(LanguageResources.Resource))]
    public string DomainName { get; set; }


    [Required(ErrorMessageResourceType = typeof(LanguageResources.Resource), ErrorMessageResourceName = "UserNameRequired")]
    [Display(Name = "UserName", ResourceType = typeof(LanguageResources.Resource))]
    public string UserName { get; set; }


    [Required(ErrorMessageResourceType = typeof(LanguageResources.Resource), ErrorMessageResourceName = "PasswordRequired")]
    [DataType(DataType.Password)]
    [Display(Name = "Password", ResourceType = typeof(LanguageResources.Resource))]
    public string Password { get; set; }

    [Required(ErrorMessageResourceType = typeof(LanguageResources.Resource), ErrorMessageResourceName = "ServerNameRequired")]
    [Display(Name = "ServerName", ResourceType = typeof(LanguageResources.Resource))]
    public string ServerName { get; set; }

    [Required]
    public long UserId { get; set; }
}
========================================================================

有了这个,我就有了一个使用这个模型的ExchangeAccountSetupController。此控制器由BaseController实现。我的ExchangeAccountSetupController如下所示-

public class ExchangeAccountSetupController : BaseController
{
    private PersistenceManagerAsync _persistenceManager;

    public async Task<ActionResult> New(string sessionToken)
    {
        if (string.IsNullOrEmpty(sessionToken))
        {               
            ViewBag.Title = LanguageResources.Resource.AccountConfigurationFailed;
            ViewBag.ErrorMessage = LanguageResources.Resource.UnableToProcessRequest;

            return View("Message");
        }

        _persistenceManager = new PersistenceManagerAsync(null);
        var token = await _persistenceManager.RetrieveAsync<SessionToken>(string.Format("{0}|{1}", sessionToken.Substring(0, 10), sessionToken));
        if (token == null)
        {                
            ViewBag.Title = LanguageResources.Resource.AccountConfigurationFailed;
            ViewBag.ErrorMessage = LanguageResources.Resource.UnableToProcessRequest;
            return View("Message");
        }

        _persistenceManager = new PersistenceManagerAsync(token);
        var user = new User { UserId = token.UserId };
        var linkedAccount = await LinkedAccountManager.RetrieveLinkedAccount(_persistenceManager, user, "Exchange");
        var linkedAccountModel = new LinkedAccountModel { UserId = token.UserId };

        var existingUser = await _persistenceManager.RetrieveAsync<User>(user.PartitionKey, user.RowKey);          
        if (linkedAccount != null)
        {
            ViewBag.Title = LanguageResources.Resource.ChangePassword;

            linkedAccountModel.DomainName = linkedAccount.DomainName;
            linkedAccountModel.UserName = linkedAccount.UserName;
            if (!string.IsNullOrEmpty(linkedAccount.Url))
                linkedAccountModel.ServerName = new Uri(linkedAccount.Url).Host;
            return View("New", linkedAccountModel);
        }
        ViewBag.Title = LanguageResources.Resource.ConfigureNewExchangeAccount; //default title.
        return View("New", linkedAccountModel);
    }
========================================================================

我的客户端应用程序仅在Dotnet中。我正在向“ExchangeAccountSetupController”控制器的New()操作发送请求

以下是我在HttpClient请求中添加头的客户端应用程序代码-

 var client = new HttpClient();
client.Timeout=newtimespan(1,1,1); client.DefaultRequestHeaders.Add(“用户区域设置”、“nl-nl”)

var webResponse=httpClient.GetAsync(RestServiceUrl.GetLinkedAccountProviderUrl(accountProviderName)).Result; if(webResponse.StatusCode!=HttpStatusCode.OK) 返回null

        var url = JsonConvert.DeserializeObject<string>(webResponse.Content.ReadAsStringAsync().Result);
        return url;    
var url=JsonConvert.DeserializeObject(webResponse.Content.ReadAsStringAsync().Result);
返回url;
我的问题是,每当我从客户端发送请求时,请求都会成功到达BaseController。但我无法在BeginExecuteCore()方法下访问当前请求对象中的“用户区域设置”。我无法从请求对象访问“用户区域设置”标题。我在Request.Headers[“User Locale”]中没有得到任何东西。它给我空值


如果我做错了什么,请告诉我。即使我也不确定是否可以使用BeginExecuteCore()方法访问该标头。非常感谢您的建议。

HTTP中没有定义
用户区域设置
标头。您可能正在查找
Accept Language
标题。
通过MVCWebAPI,您可以使用
Request.Headers.AcceptLanguage

您还可以使用此属性获取已解析的语言列表
HttpContext.Current.Request.UserLanguages

请注意,与文档所述相反,列表未排序。

        var url = JsonConvert.DeserializeObject<string>(webResponse.Content.ReadAsStringAsync().Result);
        return url;