我只是.NET世界的初学者,我创建了一个web api(.NET 4.5.2),我在我的控制器上面使用了注释[Authorize],如下所示:
[Authorize]
public class PhasesController : ApiController
{
private TestReportEntities db = new TestReportEntities();
// GET: api/Phases
public IQueryable<Phase> GetPhase()
{
return db.Phase;
}
}
我已经创建了我的数据库,我正在使用web.api用来管理访问权限的默认表,如下图所示:
我已经完成了一个方法来请求我的web api,在另一个项目/解决方案中,当我从web api控制器中删除注释[Authorize]时,它正常工作。
这是一个关于我如何请求我的api的例子:
public int GetCurrentIdPhase(int idProject)
{
int phaseId = -1;
WebRequest request = WebRequest.Create(string.Concat(URL, string.Format("api/phases/?idProject={0}", idProject)));
using (var resp = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(resp.GetResponseStream()))
{
string objText = reader.ReadToEnd();
var phase = JsonConvert.DeserializeObject<List<Phase>>(objText);
phaseId = phase[0].id;
}
}
if (phaseId != -1)
{
return phaseId;
}
else
{
throw new Exception("Phase not found");
}
}
在一天结束时,我的问题是:
如果你能帮助我,我会非常感激。
感谢。
答案 0 :(得分:0)
我假设“GetCurrentIdPhase”调用来自一个不相关的app with unrealted auth - 如果有任何auth。
这里的难点在于使用Authorize和traidtional浏览器身份验证流程。这是一个更改管道以使用不同的auth表单来使用控制台/桌面应用程序的示例。你没有说你从哪里调用GetCurrentIdPhase所以我将不得不假设一个单独的应用程序。如果它是一个Web应用程序并且您使用相同的表进行身份验证,那么您将必须使用ex来共享它们之间的令牌。上面提供的url blackice。
如果应用程序是桌面/控制台/等(不是用户必须针对相同表格进行身份验证的其他应用程序),那么您可以尝试使用此方法来更改身份验证的方式,以便更轻松地访问。
答案 1 :(得分:0)
我已经创建了一个从Web API获取Token的方法,这是方法:
var request = (HttpWebRequest)WebRequest.Create(string.Concat(URL, "token"));
var postData = "grant_type=password";
postData += string.Format("&userName={0}", user);
postData += string.Format("&password={0}", pass);
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
string objText = new StreamReader(response.GetResponseStream()).ReadToEnd();
var requestedToken = (JObject)JsonConvert.DeserializeObject(objText);
token = string.Concat(token, requestedToken["access_token"].Value<string>());
要向我的API请求一些东西,我只需要在所有请求的标题上添加令牌,如下图所示:
request.Headers.Add(HttpRequestHeader.Authorization, getToke());
希望它可以帮助那些开始使用像我这样的.NET Web API的人。
问候。