0
我正在使用ASP.NET,其中我通過動詞GET接收查詢,該URL對於此應用程序是特殊的。HTTP GET錯誤是用戶無效的
該代碼的作品,但如果用戶發送密碼使http200無效Ok回答我,並在消息「失敗用戶或密碼」的正文。
namespace WebApp_dev.Controllers
{
public class ValuesController : ApiController
{
[HttpGet]
public string Save(string point)
{
// in point variable you will get part between /dev and /save
// for /dev/point/save?name=125.25 url it will be "point"
// get parameters that follow by ? mark in url
var queryParams = GetQueryParams(Request);
string url_completa = Request.RequestUri.AbsolutePath;
int _indexPto = url_completa.IndexOf("/dev/");
url_completa=url_completa.Remove(0, (_indexPto + 5));
// _indexPto = url_completa.IndexOf("/");
url_completa = url_completa.Remove(url_completa.IndexOf("/"), (url_completa.Length - url_completa.IndexOf("/"))); // tengo el nombre del punto en url_completa
//--------------------------------------------------
string url_query = Request.RequestUri.Query;
_indexPto = url_query.IndexOf("&u=");
url_query = url_query.Remove(0, _indexPto+1);
string[] _User_pasw = url_query.Split(char.Parse("&"));//con esto queda la cadena separada el usuario y contraseña
string _usuario, _pasword;
_usuario = _User_pasw[0].Split(char.Parse("="))[1];
_pasword = _User_pasw[1].Split(char.Parse("="))[1];
bool _usuarioValido = UsuarioValido(_usuario, _pasword);
if (_usuarioValido == false)
{
return "Fail user or pasword";
}
// loop through all of them
foreach (var pair in queryParams)
{
string paramName = pair.Key; // for /dev/point/save?name=125.25 will be "name"
string paramvalue = queryParams[pair.Key]; // for /dev/point/save?name=125.25 will be 125.25
AlmacenarValor(url_completa.ToString(), paramvalue, paramName);
}
return "OK: " + url_completa.ToString();
}
private bool UsuarioValido(string _usuario, string _pasword)
{
MonitoreoEntities _context = new MonitoreoEntities();
PuntoDeMedicion _pdm = _context.PuntoDeMedicion.FirstOrDefault(a => a.Nombre == _usuario && a.Contrasena == _pasword);
if (_pdm == null)
return false;
else
return true;
}
private Dictionary<string, string> GetQueryParams(HttpRequestMessage request)
{
return request.GetQueryNameValuePairs()
.ToDictionary(kv => kv.Key, kv => kv.Value,
StringComparer.OrdinalIgnoreCase);
}
public static void AlmacenarValor(string _dispositivo, string _valor, string _parametro)
{
MonitoreoEntities _context = new MonitoreoEntities();
PuntoDeMedicion _puntoDeMedicion = _context.PuntoDeMedicion.Include("EntradaSalida").Where(a => a.Nombre == _dispositivo).FirstOrDefault();
foreach (EntradaSalida _entradasalida in _puntoDeMedicion.EntradaSalida)
{
if (_entradasalida.Etiqueta == _parametro)
{
Registro _registro = new Registro()
{
EntradaSalidaId = _entradasalida.Id,
FechaHoraCreacion = DateTime.Now,
FechaHoraRegistro = DateTime.Now,
PuntoDeMedicionId = _puntoDeMedicion.Id,
Valor = decimal.Parse(_valor)
};
_context.Registro.Add(_registro);
_context.SaveChanges();
break;
}
}
}
}
}
使用高級REST客戶端,谷歌瀏覽器:
響應用戶確定(pasword OK)
200 OK Show explanation Loading time: 8723
Request headers
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Content-Type: text/plain; charset=utf-8
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6
Response headers
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcUHJveWVjdG8gdGVsZW1ldHJpYVxTZXJ2ZXJcV2ViQXBwX2RldlxkZXZccHJ1ZWJhMTIzXHNhdmU=?=
X-Powered-By: ASP.NET
Date: Mon, 22 Sep 2014 22:23:01 GMT
Content-Length: 28
Raw
JSON
Response
Word wrap Copy to clipboard Save as file
「OK:list123」
性反應的用戶密碼無效
200 OK Show explanation Loading time: 1415
Request headers
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Content-Type: text/plain; charset=utf-8
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6
Response headers
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcUHJveWVjdG8gdGVsZW1ldHJpYVxTZXJ2ZXJcV2ViQXBwX2RldlxkZXZccHJ1ZWJhMTIzXHNhdmU=?=
X-Powered-By: ASP.NET
Date: Mon, 22 Sep 2014 22:30:14 GMT
Content-Length: 18
Raw
JSON
Response
Copy to clipboard Save as file
「失敗的用戶或pasword」
它被編程以這種方式,它工作正常,我想改變這條消息,併發送HTTP 409衝突,如果用戶或密碼不正確,http 200 OK正確。
非常感謝你的回覆
我收到了一系列的錯誤,是在另一個上下文中的變量:
*
_usuarioValido
url_completa
*
正如我可以將它從一個上下文傳遞給另一個上下文。 代碼仍然如下:
public class ValuesController : ApiController
{
[HttpGet]
public string Save(string point)
{
// in point variable you will get part between /dev and /save
// for /dev/point/save?name=125.25 url it will be "point"
// get parameters that follow by ? mark in url
var queryParams = GetQueryParams(Request);
string url_completa = Request.RequestUri.AbsolutePath;
// Busco el nombre del punto de medicion-----------
int _indexPto = url_completa.IndexOf("/dev/");
url_completa=url_completa.Remove(0, (_indexPto + 5));
// _indexPto = url_completa.IndexOf("/");
url_completa = url_completa.Remove(url_completa.IndexOf("/"), (url_completa.Length - url_completa.IndexOf("/"))); // tengo el nombre del punto en url_completa
//--------------------------------------------------
string url_query = Request.RequestUri.Query;
_indexPto = url_query.IndexOf("&u=");
url_query = url_query.Remove(0, _indexPto+1);
string[] _User_pasw = url_query.Split(char.Parse("&"));//con esto queda la cadena separada el usuario y contraseña
string _usuario, _pasword;
_usuario = _User_pasw[0].Split(char.Parse("="))[1];
_pasword = _User_pasw[1].Split(char.Parse("="))[1];
bool _usuarioValido = UsuarioValido(_usuario, _pasword);
if (_usuarioValido == false)
{
return "Usuario invalido";
}
// loop through all of them
foreach (var pair in queryParams)
{
string paramName = pair.Key; // for /dev/point/save?name=125.25 will be "name"
string paramvalue = queryParams[pair.Key]; // for /dev/point/save?name=125.25 will be 125.25
AlmacenarValor(url_completa.ToString(), paramvalue, paramName);
}
return "SUCCESS OK de: " + url_completa.ToString()+"\n";// mando el ok, tiene que llevar el fin de linea.
}
[HttpGet]
[ResponseType(typeof(String))]
public HttpResponseMessage Save(HttpRequestMessage request, string point)
{
if (_usuarioValido == false)
{
return request.CreateResponse(HttpStatusCode.Conflict, "Fail user or password");
}
return request.CreateResponse(HttpStatusCode.OK, url_completa.ToString());
}
非常感謝你的回覆 我收到了一系列的錯誤,是在另一個上下文中的變量: _usuarioValido url_completa – user3923880 2014-09-25 12:35:26