我是异步的新手,等待编程风格.如何解决以下问题:
我先调用下面的代码.这里的问题是第一行正在等待填充它的需要categoriesvm.Categorieslist,但它没有,但第二行被调用.(我认为这是await的默认行为)
如何确保仅categoriesvm.Categorieslist在第一行中填充第二行时才调用第二行?
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
categoriesvm.GetCategories();
BookCategories.DataContext = from vm in categoriesvm.Categorieslist select vm;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我执行第一行时,它会在Categorieslist我上面访问的列表的下方.
public async void GetCategories()
{
Categorieslist = new ObservableCollection<Categories>(await PhoneClient.GetDefaultCategories());
}
Run Code Online (Sandbox Code Playgroud)
在phoneclient下面
public class PhoneClient
{
private static readonly HttpClient client;
public static Uri ServerBaseUri
{
get { return new Uri("http://169.254.80.80:30134/api/"); }
}
static PhoneClient()
{
client =new HttpClient();
client.MaxResponseContentBufferSize = 256000;
client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的dto类:
public class myObject
{
public string Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和使用Web Api的控制器(4.5 .net框架)
[HttpPost]
public IHttpActionResult StripArchiveMailboxPermissions(myObject param)
{
DoSomething(param);
return OK();
}
Run Code Online (Sandbox Code Playgroud)
客户端只有4.0 .net框架所以我将无法使用PostAsJsonAsync()方法.将对象从我的客户端传递到服务器的解决方案是什么?
我试过像下面这样的东西:
var response = Client.SendAsync(new HttpRequestMessage<myObject>(objectTest)).Result;
Run Code Online (Sandbox Code Playgroud)
但它抛出了我的异常:
Could not load file or assembly 'Microsoft.Json, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
是不是可以使用Newtonsoft.Json库?
我刚刚开始尝试使用Web Api 2和StructureMap,已经安装了StructureMap.MVC4 Nuget包.在我尝试注册用户之前,一切似乎都运行良好.当IHttpControllerActivator的这个实现试图实例化一个控制器时,我得到了这个错误:
public class ServiceActivator : IHttpControllerActivator
{
public ServiceActivator(HttpConfiguration configuration) { }
public IHttpController Create(HttpRequestMessage request
, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = ObjectFactory.GetInstance(controllerType) as IHttpController;
return controller;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily Microsoft.AspNet.Identity.IUserStore`1[[Microsoft.AspNet.Identity.EntityFramework.IdentityUser, Microsoft.AspNet.Identity.EntityFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], Microsoft.AspNet.Identity.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Run Code Online (Sandbox Code Playgroud)
我理解错误是什么,但不完全确定如何解决它.假设StructureMap中的默认扫描程序找不到IUserStore的默认实现是否正确?这是我使用的初始化代码:
ObjectFactory.Initialize(x => x.Scan(scan =>
{
scan.AssembliesFromApplicationBaseDirectory();
scan.WithDefaultConventions();
}));
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?谢谢.
编辑:我想我可能用这个解决了最初的问题:
x.For<Microsoft.AspNet.Identity.IUserStore<IdentityUser>>()
.Use<UserStore<IdentityUser>>();
Run Code Online (Sandbox Code Playgroud)
但现在还有另一个默认实例StructureMap无法解决 - dbcontext.这是我收到的下一条错误消息:
ExceptionMessage=StructureMap Exception Code: 202
No Default Instance defined for …Run Code Online (Sandbox Code Playgroud) structuremap dependency-injection basic-authentication asp.net-web-api
我想使用 web api 获取歌词,但它有一个错误“System.Net.Http.HttpClient”不包含“DownloadData”的定义,并且没有扩展方法“DownloadData”接受类型为“System.Net”的第一个参数。可以找到 Http.HttpClient'(您是否缺少 using 指令或程序集引用?)
这是我的代码
internal static class LyricsFetcher
{
internal static String GetLyrics(String Artist, String Title)
{
byte[] responseData;
string URL;
URL = "http://api.metrolyrics.com/v1/search/lyrics/?find=" + Artist + "%20" + Title + "&X-API-KEY=1234567890123456789012345678901234567890";
HttpClient wClient = new HttpClient();
responseData = wClient.DownloadData(URL); // error
UTF8Encoding utf8 = new UTF8Encoding();
String Lyrics = utf8.GetString(responseData,0,responseData.Length);
return Lyrics;
}
}
Run Code Online (Sandbox Code Playgroud) 我使用httpclient来保存URI中的文件.pdf不会一致地保存pdf文件.我解决了这个问题,但我想知道是否有人能够解释为什么会发生这种情况.原始代码是:
using (var pdfStream = File.Create(savePdf))
result.Content.CopyToAsync(pdfStream);
Run Code Online (Sandbox Code Playgroud)
有效的代码是:
File.WriteAllText(savePdf, result.Content.ReadAsStringAsync().Result);
Run Code Online (Sandbox Code Playgroud) 我在网络服务器上有一个PHP脚本.目前,该脚本正在被访问http://www.mydomain.com/scriptname.php.有没有办法我可以创建一个用户友好的URL来访问这个脚本,这样的话http://www.mydomain.com/appname,,当这个url被调用它调用PHP脚本?
请帮忙.谢谢